[PHP-users 33234] Re: SQLインジェクションの可能性

rimk @ sky.sannet.ne.jp rimk @ sky.sannet.ne.jp
2008年 2月 4日 (月) 11:04:31 JST


田中と申します。

インジェクションの対策の基本的な考え方は、
 入力データ値の文字種属性の可能性とエンコード と 
 出力データの受け入れ可能な文字種属性をその都度チェック・エスケープ
することだと思います。

mysql_real_escape_string を使えばなんでもOKではダメで、
POST入力値をHTMLエンコードした上で、PHPのROW文字種に変換し、受け入れ
可能かチェックをします。
日本語ぽいバイナリだったらチェックしない、これ自体インジェクションに
つながります。
SQLの文字列としてmysql_real_escape_stringを使うという認識が必要でしょう。
ですので、入力値に入るデータの可能性を見極め、チェックし、出力タイプ毎に
エスケープをすることが必要だと思います。

たとえば、LIKE 演算子の左辺値に mysql_real_escape_string を利用したら
どうなるでしょう。それぞれの値の使い方に合わせたエスケープ処理が必ず
必要でしょう。
--
rimk @ sky.sannet.ne.jp



PHP-users メーリングリストの案内