ソシム>http://www.amazon.co.jp/gp/product/4883374718/503-3339577-1535166?v=glance&n=465392&s=gateway]]から特に気になる、注意しておきたい、知見や問題、対策などを簡易にメモしたものです。アプリケーションのセキュリティについてのメモ>http://www.asahi-net.or.jp/~wv7y-kmr/memo/php_security.html]]を読みながら進めます。フォーム受付時のタイミングでサニタイジングを行うのかと思いがちである。サニタイジングは(2)HTML生成時のタイミングで行うべきである。次章「クロスサイトスクリプティング対策の詳細」で説明するが,データを埋め込むHTML中の文脈に合わせて適切なサニタイジング手法を選択する必要があるからである。掲示板の例では,将来的にデータベースへの記事の書き込み手段として,メールによる投稿が導入された場合でも,(2)HTML生成時のタイミングでサニタイジングしていれば,なんら手を加えることなく,いろんな入力源から入り込んでくるデータを漏れなくサニタイジングできる。同じデータに誤って2回以上サニタイジングしてデータの意味が変わってしまうという設計上のトラブルも防げる。>>このようにサニタイジングのタイミングは(1)フォーム受付時ではなく,(2)HTML生成時でなければならない。Developers』でもHTML生成時のサニタイジングを推奨している。-->、スタイルシートなどによって異なる対策が必要。[#bdf6e920]-バイナリセーフじゃない関数でチェックした後にバイナリセーフの関数を使う。その逆のケースで想定外の動作をしてしまう問題。-正規表現のチェック等で注意。ereg系はバイナリセーフではない。個人的にはバイナリセーフのpreg系で統一するのがよいと思う。バイト攻撃で任意のファイルが読めたりする可能性あり)。require($config_file_list[$_GET['command']]);~SQLに渡すカラム値などもこの方法を使い、直接渡さないようにするのが望ましい。[#lf88be37]-HTTPレスポンス分割と意図は殆ど同じ。吐き出すヘッダをチェックして、ユーザの入力値をそのまま出さないようにする。Offにするのは基本。php://inputを使用する方法がある。-対策としてはNULLバイト攻撃と同じ。