home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

JavaScript/エスケープ時の注意点メモ (v1)

JavaScript/エスケープ時の注意点メモ (v1)

JavaScript / エスケープ時の注意点メモ (v1)
id: 1016 所有者: msakamoto-sf    作成日: 2011-09-11 23:12:52
カテゴリ: HTML JavaScript セキュリティ 

JavaScriptのエスケープを意識する箇所:

a. document.write(...);
b. jQuery : $('#id').text(...);
c. jQuery : $('#id').html(...);
d. JSON : { "key" : "..." }

まだまとめきれてません:

  • ダブルクォート・シングルクォートの両方をエスケープすること。
  • バッククォート(0x5C)もエスケープすること。(「\'」が「\\\'」or「\\&#039」)
  • 過剰エスケープに注意。

参考:

正直頭が痛くなってきます。

$('#id').text('<?php echo htmlspecialchars($_GET['data'], ENT_QUOTES); ?>');

とすると二重エスケープになってしまいます。なので

$('#id').text('<?php echo $_GET['data']; ?>');

としてしまいますと、"</script>"などの閉じタグが入り込んでしまうとブロックが閉じてしまいます。
結果、

$('#id').html('<?php echo htmlspecialchars($_GET['data'], ENT_QUOTES); ?>');

としないと安心できません(=安全、と断言できるレベルではまだ無い)。
しかしそうなってくると、そもそもjQueryのhtml()でHTMLブロックをごそっと突っ込む機能自体が要らないのではないか、という気もしてきます。
つまり入力に含まれるHTMLタグは、エスケープされて表示されるべきということを徹底し、HTML要素を組み立てる必要があれば、DOM要素を1つずつ組み立てていく方が安心できます。とはいえ、過剰エスケープを抑制するためにわざわざ「エスケープをしない」jQuery.html()を使う、というのも混乱を招きそうです。

hiddenタグに出力してそれを参照する、という形について後日検証してみます。



プレーンテキスト形式でダウンロード
表示中のバージョン : 1
現在のバージョン : 2
更新者: msakamoto-sf
更新日: 2011-09-12 08:21:58
md5:61c12759266d8147847e42e7deb99b71
sha1:f0ab798e71fe1a8f63e2817c55fed1f03be96353
コメント
コメントを投稿するにはログインして下さい。