假设一个 PHP 页面接受 URL 路径作为 POST 参数(就像这个问题的答案):
$path = $_POST['url_path'];
file_get_contents('http://example.com' . $path);
恶意用户发布url_path
为@evil.com/stuff.html
.
由于代码采用用户输入并在没有分隔符的情况下附加它以结束用户名部分(例如?
,/
),$path
因此最终为:
http://example.com@evil.com/stuff.html
这意味着用户名example.com
访问http://evil.com/stuff.html
。
这种类型的攻击是否已经有一个特定的名称?我发现最接近的是Semantic URL attack,但这似乎更具语法性。它似乎是一种 URL 混淆,但是由于它在服务器上,并且在地址栏中对最终用户不可见,因此它是一种与网络钓鱼略有不同的攻击类型。
注意:该代码也容易受到其他类型的域操作的影响,例如附加一些东西来改变对另一个顶级域的解释(例如 POSTing .uk
to change example.co
)。因此,在此基础上,我将其称为一般字符串连接缺陷,而不是专门与 URL 相关的攻击——但是,我想把它放在地板上。