[PHP-users 32386] Re: PHPを使ってのPostgresqlについて
kanonbell
kanonbell.sky @ gmail.com
2007年 7月 8日 (日) 03:32:42 JST
こんばんは
> MSSQLの場合、SJISが文字エンコーディングである可能性が非常に高いので
> かなり致命的ですね...
PHP自体はSJISにする必要はないのでUTF-8でやってますが、クエリ自体は
SJISで渡すことになりますね。
> > よろしければ、str_replaceだと防げない攻撃方法の手順や、pg_escape_string
> > のようなエスケープ関数がない場合のエスケープ方法など教えていただけませんか?
> > 上の記事と同様なら、いったんmb_convert_encodingくぐらせるのかな。
>
> 詳しい攻撃方法を説明には文字数が必要なので簡単に説明すると、基本的な
> 攻撃手法は2種類あります。
>
> - マルチバイト文字に無条件にエスケープ文字を追加させ特殊文字を無効化させる方法
> - マルチバイト文字の開始データ(SJISの1バイト目など)で特殊文字を無効化する方法
なるほど。挙げたサイトの例は2番目に相当するのかな。
> XSSだと文字エンコーディングの明示的な切り替えを利用してJavaScriptを実行
> させる方法もあります。
> # <script>に見えないように複数の文字エンコーディングを利用して隠す、等
>
> XSSもあるのでmb_check_encoding関数で入力のバリデーション時にチェックし、
> さらにstr_repalceでなく文字エンコーディングを考慮するmb_ereg_replaceで
> 置換するようにすればOKです。
ありがとうございます。
いろいろ調べつつ、XSSも含めて対策考えます。
> 海外フレームワークのバリデーションコードには文字エンコーディングのバリ
> デーションが全く欠落している物がほとんどですが、本当は必須のバリデーショ
> ンです。
PHP自体ネイティブにマルチバイト対応してないですし、考慮されてないのは
仕方のないことなんですかねえ。
普段使わないから思いついてもチェック甘くなりそうだし。
PHP-users メーリングリストの案内