jQuery で HTML テキストを escape する方法
例えば、外部からもらったテキストを
var text = jQuery( 'input[name="xxxx"]' ).val();
jQuery( 'xxxx' ).html( text );
なんてすると、XSS してくださいと言っているようなもの。
けど、jQuery 及び Javascript には escape 関数が用意されていない。
Javascript の escape 関数は主に全角文字、特殊文字をエスケープするもので、HMTL タグをエスケープするものではない。
関数を用意してもいいのだけど、スマートな方法を発見したので、覚書
var text = jQuery( 'input[name="xxxx"]' ).val();
text = jQuery( '<span/>' ).text( text ).html();
こうすることで、何とエスケープできてしまう。
ポイントは text 関数。こいつがテキストの内容をエスケープしている。
因みに、Javascript でも
elem./*@if(1) innerText @else@*/ textContent /*@end@*/ = text;
とすることで XSS は防げる。
安易に html に突っ込まないようにしたい。