私はPHP Internalsに関するいくつかのニュースグループの投稿を掘り下げて調べており、このトピックに関する興味深い議論を見つけました。最初のスレッドは何か他のものに関するものでしたが、PHPの世界の(そうでないとしても)セキュリティの専門家であるStefan Esserによる発言は、いくつかの投稿で$ _REQUESTを使用することのセキュリティへの影響に向けて議論を向けました。
PHP内部でのStefan Esserの引用
$ _REQUESTは、PHPの最大の設計上の弱点の1つです。$ _REQUESTを使用するすべてのアプリケーションは、おそらくクロスサイトリクエストフォージェリの遅延の問題に対して脆弱です。(これは基本的に、たとえば(age)という名前のCookieが存在する場合、常にGET / POSTコンテンツを上書きするため、不要なリクエストが実行されることを意味します)
そして、で、後で同じスレッドに返信
誰かがGET、POSTを偽造できるということではありません。COOKIE変数。これは、COOKIEがREQUESTのGETおよびPOSTデータを上書きするという事実についてです。
したがって、たとえばaction = logoutと表示されるcookieをブラウザに感染させると、REQUEST [action]が永久にログアウトされるため(手動でcookieを削除するまで)、その日以降はアプリケーションを使用できなくなります。
COOKIEに感染させるのはとても簡単です...
a)サブドメインの任意のアプリケーションでXSS脆弱性を使用できます
b)所有しているときに* .co.ukまたは* .co.krにCookieを設定してみましたそこに単一のドメイン?
c)その他のクロスドメインはどのような方法でも...
これが問題ではないと思われる場合は、* * .co.kr cookieを設定して、いくつかのPHPバージョンがホワイトページを返すだけの単純な可能性があることをお伝えします。想像してみてください。*。co.kr内のすべてのPHPページを削除するための単一のCookie
そして、呼ばれる変数で* .co.krのための有効なクッキーに不正なセッションIDを設定することにより、+ PHPSESSID = 違法ことができますまだDOS PHPのセッションを使用して、韓国内のすべてのPHPアプリケーション...
ディスカッションはさらにいくつかの投稿で続けられており、読むのは興味深いものです。
ご覧のとおり、$ _ REQUESTの主な問題は、$ _ GETおよび$ _POSTからのデータだけでなく、$ _ COOKIEからのデータもあることです。リストの他の何人かは、最初に$ _COOKIEで埋めるなど、$ _ REQUESTが埋められる順序を変更することを提案しましたが、これにより、セッション処理など、他の多くの潜在的な問題が発生する可能性があります。
ただし、$ _ REQUESTグローバルから$ _COOKIESを完全に省略して、他の配列で上書きされないようにすることもできます(実際には、variable_order ini設定に関するPHPマニュアルのように、標準コンテンツの任意の組み合わせに制限できます。教えてくれ:
variable_order EGPCS(環境、取得、投稿、Cookie、およびサーバー)変数解析の順序を設定します。たとえば、variables_orderが "SP"に設定されている場合、PHPはスーパーグローバル$ _SERVERおよび$ _POSTを作成しますが、$ _ ENV、$ _ GET、および$ _COOKIEは作成しません。""に設定すると、スーパーグローバルは設定されません。
しかし、繰り返しになりますが、単純にPHPでは環境、取得、投稿、Cookie、およびサーバーに独自のグローバルでアクセスでき、攻撃ベクトルが1つ少ないため、$ _ REQUESTを完全に使用しないことも検討できます。このデータはまだサニタイズする必要がありますが、心配する必要はもう1つありません。
なぜ$ _REQUESTが存在するのか、なぜ削除されないのか疑問に思われるかもしれません。これはPHPの内部についても尋ねられました。なぜ Rasmus Lerdorfを引用して$ _REQUESTが存在するのですか?PHP内部
このようなものを削除するほど、新しい、より高速で安全なバージョンのPHPにすばやく移行することが難しくなります。これは、いくつかの「醜い」レガシー機能よりもはるかに多くのフラストレーションを引き起こします。適切な技術的な理由、パフォーマンス、またはセキュリティがある場合、私たちはそれをしっかりと検討する必要があります。この場合、$ _ REQUESTを削除する必要があるかどうかではなく、Cookieデータを削除する必要があるかどうかを確認する必要があります。私のすべてのものを含む多くの構成がすでにそれを行っており、$ _ REQUESTにCookieを含めないことには強力な有効なセキュリティ上の理由があります。ほとんどの人は$ _REQUESTを使用してGETまたはPOSTを意味し、Cookieが含まれている可能性があることを認識していません。
とにかく、いくつかの光を当てることを願っています。