ホーム > 日記 > XSS対策について

XSS対策について

クロスサイトスクリプティング対策の落とし穴

単なる文字列の置換に「ereg_replace」を利用することに疑問を持ち、その後のバイナリセーフではないので危険という展開も強引な気がします。
文字列の置換ならば「str_replace」、正規表現を利用した置換ならば、マニュアルにeregは遅いという旨の記述があり「preg_replace」を選択するでしょう。
ereg_replaceはバイナリセーフでないですし、preg_replaceを利用しましょう。

サニタイズに関しては<>を削除すればOKという教えるようなところは今時ないです、たぶん。
PHPなら「htmlentities」「htmlspecialchars」を利用しようと簡単に済ませてあるのが大半です。
その際に第二引数にENT_QUOTESを利用しなければいけないという展開がベターであり希望するところです。

ヌルバイトアタック、マルチバイト崩れに関しては、前記の問題よりも認知度が低いと思われるので、実例を挙げた上で対処法ともう少しスペースを割いて欲しいと思いました。
ヌルバイトアタックは「\0」を取り除く方法で対処するが、その際にバイナリセーフではない関数は利用できません。


$str = str_replace("\0", '', $str); 

崩れたマルチバイト文字に関しては、エンコード変換を通すことによって取り除くことが可能です。


$str = mb_convert_encoding($str, 'SJIS-win', 'SJIS-win'); 

Sanitizeという言葉が嫌いなようですが、これは認識の違うのかなと思います。
個人的には、入力値に対しての処理がValidation、出力の際の処理がSanitize。
ヌルバイトアタック、マルチバイト崩れに対するValidation、<>'”を処理するSanitize。
2つでセット。
XSSを防ぐには常にこのSanitizeとValidationが必要です。

カテゴリー: 日記 タグ:
  1. コメントはまだありません。
  1. トラックバックはまだありません。