web-dev-qa-db-ja.com

HTTPパラメータ汚染攻撃で2つのパラメータが必要なのはなぜですか?

HTTPパラメータの汚染について読んでいますが、1つ混乱しています。このようなエンドポイントがある場合、

https://security.stackexchange.com/editpost/?postuid=19348

あなたは次のようなHPP攻撃を試みました

https://security.stackexchange.com/editpost/?postuid=19348&postuid=1

バックエンドはまだ、編集しようとしているユーザーの投稿であることを確認しようとしませんか?リクエストとともに送信したCookieを介して

なぜこれが機能するのか、

https://security.stackexchange.com/editpost/?postuid=19348&postuid=1

そして、なぜあなたはこのようにURLを編集できないのですか?

https://security.stackexchange.com/editpost/?postuid=1
41
Kevin Lance

サーバーコードのさまざまな部分がさまざまな方法でリクエストを解釈し、その結果、アプリケーションがHTTPパラメータ汚染に脆弱になるという考え方になります。

あなたの例/editpost/?postuid=19348&postuid=1の場合、承認を実行するコード部分(postuid=19348で承認を確認する必要があります)と実際の編集(postuid=1)。

これは、最近のWebアプリケーションでは通常の問題ではありません。たとえば、phpの(最新バージョンの)PHPでは、通常、パラメータ解析はフレームワークによって行われるため、$_GET["postuid"]には両方のコードフラグメントに同じ値が含まれ、HTTP = PP攻撃は役に立たない。

HTTP PPは、パラメータが「手動」で、つまりアプリケーションロジックレイヤーで解析される場合、以前は大きな問題でした(そして、これは常に問題です)。この解析を異なる方法で実装する人々。

78
Tobi Nary