[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 メーリングリストの案内