なぜPHPアプリにセキュリティホールが多いのか?
【スクリプトインジェクション対策13】不正な文字データを保存できないようにする
この記事を読むのに必要な時間:およそ 0.5 分
データベースサーバの場合,文字列型のコラムに不正な文字エンコーディングの文字列が保存できないように設定できるものも少なくありません。この場合データベースサーバ等は正しい文字エンコーディングのデータのみを保存できますが,ファイル等ではそれを保証することができません。正しい文字データを保存しないとシステム上のどこで問題が発生するか分からなくなります。
例えば,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システムでは文字エンコーディングを厳格に取り扱うよう注意しなければなりません。
対策のまとめ
- 入力時に文字エンコーディングが妥当か確認する
- 文字エンコーディングは可能な限り厳格に取り扱う
- データベースサーバ設定など不正な文字エンコーディングが保存できないようにする
補講
- 【スクリプトインジェクション対策19】ユーザを教育する
- 【スクリプトインジェクション対策18】ログイン処理を正しく実装する
- 【スクリプトインジェクション対策17】パスワードを正しく管理する
- 【スクリプトインジェクション対策16】関連するサイトが利用しているドメイン名の一覧を提供する
- 【スクリプトインジェクション対策15】JavaScriptが無効なクライアントでも利用可能なサイトにする
- 【スクリプトインジェクション対策14】HTML,CSS,JavaScriptの生成はホワイトリスト方式を利用する
- 【スクリプトインジェクション対策13】不正な文字データを保存できないようにする
- 【スクリプトインジェクション対策12】データベースなど,内部データを信用しない
- 【スクリプトインジェクション対策11】エスケープしてはならないデータ以外はすべてエスケープする
- 【スクリプトインジェクション対策10】すべての入力値を可能な限り厳しい条件で検証する
-
Webアプリセキュリティ対策入門〜あなたのサイトは大丈夫?
本書は,Webサイトのセキュリティ確保のために必要な基礎知識と,安全なコードを書くために必要な基礎知識を解説しています。Webアプリケーションは比較的簡単に作成で...
-
はじめてのPHP言語プログラミング入門
Webアプリケーション構築ツールとしてPHPを取り上げた書籍は数多くありますが,言語の解説・入門書としての書籍はあまりありません。 本書は,プログラミング言語として...

