私は最近、スーパーグローバルを使用することを提案する人気のある PHP 関連の回答をいくつか見つけまし$_REQUEST
たregister_globals
。
なぜ$_REQUEST
悪い慣行なのかについて、適切な説明/証拠を提供できますか? 私が掘り起こしたいくつかの例を捨てて、理論的な攻撃ベクトルと現実世界のエクスプロイトの両方に関するより多くの情報/視点、およびシステム管理者がリスクを軽減するために実行できる合理的な手順の提案を楽しみにしています (アプリを書き換える...または、管理に行って書き換えを主張する必要がありますか?)。
脆弱性の例:デフォルトGPC
の配列マージ順序は、COOKIE 値が GET および POST をオーバーライドすることを意味するため$_REQUEST
、XSS および HTTP 攻撃に使用される可能性があります。PHP では、Cookie 変数でスーパーグローバル配列を上書きできます。このトークの最初の 10 枚のスライドは例を示しています (トーク全体が素晴らしいです)。CSRF 攻撃のphpMyAdmin エクスプロイト例。
対策の例:$_REQUEST
配列のマージ順序を から GPC
に再構成してCGP
、GET/POST が COOKIE を上書きするようにします。その逆ではありません。Suhosinを使用して、スーパーグローバルの上書きをブロックします。
(また、私の質問がだまされたと思うかどうかは尋ねませんが、幸いなことに、 「いつ、なぜ $_GET / $_POST / $_COOKIE の代わりに $_REQUEST を使用する必要があるのか?」に対する圧倒的な SO の回答は「決して」でした。 )