なぜPHPアプリにセキュリティホールが多いのか?

【スクリプトインジェクション対策13】不正な文字データを保存できないようにする

データベースサーバの場合、文字列型のコラムに不正な文字エンコーディングの文字列が保存できないように設定できるものも少なくありません。この場合データベースサーバ等は正しい文字エンコーディングのデータのみを保存できますが、ファイル等ではそれを保証することができません。正しい文字データを保存しないとシステム上のどこで問題が発生するか分からなくなります。

例えば、libxml2は壊れたUTF-8エンコーディングを利用するとDoS攻撃に脆弱になる問題が最近修正されました。

http://nvd.nist.gov/nvd.cfm?cvename=CVE-2007-6284

The xmlCurrentChar function in libxml2 before 2.6.31 allows context-dependent attackers to cause a denial of service (infinite loop) via XML containing invalid UTF-8 sequences.

ブラウザは文字エンコーディングを利用した攻撃に非常に脆弱です。特にWebシステムでは文字エンコーディングを厳格に取り扱うよう注意しなければなりません。

対策のまとめ

  • 入力時に文字エンコーディングが妥当か確認する
  • 文字エンコーディングは可能な限り厳格に取り扱う
  • データベースサーバ設定など不正な文字エンコーディングが保存できないようにする

おすすめ記事

記事・ニュース一覧