beroの日記: HTTPパラメータ汚染(HPP)
HTTP Parameter Pollution(HPP)
Http Parameter Pollution, a new category of web attacks (slideshare)
pdf
偶然知ったのだが日本ではあまり知られてない気がする。(検索しても日本語ページが出てこない。気づかなかっただけかもしれないが)
(GET/POST/Cookie)パラメータとして「dmy¶m=value」をエンコードした「dmy%26param%3dvalue」を渡した場合、
処理の流れによってはparamを上書きできるという話、だと思う。
フロントエンドのパラメータをバックエンド(RESTサービスかなんか)にそのまま投げてる場合
String amount=request.getParameter("amount");
String beneficiary=request.getParameter("recipient");
HttpRequest("http://backendServer.com/servlet/actions","POST","action=transfer&amount="+amount+"&recipient="+beneficiary);
http://frontendHost.com/page?amount=1000&recipient=Mat%26action%3dwithdraw
が
action=transfer&amount=1000&recipient=Mat&action=withdraw
になる(20-21ページ)
まあこれはバックエンドに投げる前にエスケープ忘れてるだけじゃね?
SQLインジェクションと同種のバグであって、同種の対策でいんじゃね?
といえるが
GETパラメータが(SEO的に?)ウザいので
mod_rewriteでかっこいいURLに見せる、なんてのは
RewriteRule ^([^/]+)$ page.php?action=view&page=$1&id=0 [L]
http://host/abc
が内部的に
http://host/page.php?action=view&page=abc&id=0
となるが
http://host/abc%26action%3dedit
は
http://host/page.php?action=view&page=abc&action=edit&id=0
となり、ここでphpでは同名パラメータは後のほうが優先されるので
actionにはeditが入る(23-24ページ)
資料ではask.com,exciteなど現実サイトのヤバイ例が出てくる。
HTTPパラメータ汚染(HPP) More ログイン