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

ml @ colosuke.net ml @ colosuke.net
2008年 2月 4日 (月) 14:56:12 JST


うえだです。

SQLインジェクションからは外れてしまいますが。

>POST入力値をHTMLエンコードした上で、
DBなどに保存するデータの場合、格納前にエンコード(エスケープ)してから格
納しよう、という主張を時々見かけますが、私は違和感を感じます。

理由として、他のレスにもあるように、エンコードすると文字列長が変化してし
まうため、予定していた長さと異なる可能性があるということと、出力する際に
「すでにエンコードされている」という前提でそのまま表示してしまうと、何ら
かの事情でエンコードされていないデータがDBなどに格納されていた場合、その
ままエンコードされずに表示されてしまう危険性があります。

そのため、私はDBなどには生データを保存し、出力時に必要に応じてエンコード
(エスケープ)するという手段をとっています。
DBなどには生データを保存する手段のほうが、将来的なアプリケーション側の変
更などに対応しやすいと思うのですが、問題があるのでしょうか。



> 田中と申します。
> 
> インジェクションの対策の基本的な考え方は、
>  入力データ値の文字種属性の可能性とエンコード と 
>  出力データの受け入れ可能な文字種属性をその都度チェック・エスケープ
> することだと思います。
> 
> mysql_real_escape_string を使えばなんでもOKではダメで、
> POST入力値をHTMLエンコードした上で、PHPのROW文字種に変換し、受け入れ
> 可能かチェックをします。



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