parse_url 的漏洞(绕开POST的域名检测) - NOTEBOOK
parse_url 的漏洞(绕开POST的域名检测)
PHP / MySQLPosted on 2023-10-09
摘要 : 在检测POST时,经常需要检测 HTTP_REFERER 的域名是否合法。
如果使用parse_url来解析出域名,很容易被人用伪造的办法来绕开检测。
❱ 链接
parse_url绕过parse_url函数的解释和绕过// 2023-10-09
// 从网址中获得域名
// parse_url 不可以用于判断 POST 域名,因为有漏洞可以绕开
function get_domain($url){
return current(explode('/',end(explode('://',$url,2)),2));
}
//https://www.aaa.com/bbb/?new=1&old=2
// 得到 www.aaa.com
❱ 正常解析
<?php
$url = "http://www.baidu.com/suning?v=1&k=2#id";
echo $url.'</br>';
$parts = parse_url($url);
var_dump($parts);
?>
❱ 非正常解析
//假设传入的是 http://www.baidu.com@2333.com/suning?v=1&k=2#id
发现host变成了2333.com,这样host检测就被绕开了。
❱ 在路径中加多两个斜杠( / )也会导致解析失败
//例如。http://www.test.com///index.php?name=david
❱ 获取 url 中域名的方法
// 2023-10-09
// 从网址中获得域名
// parse_url 不可以用于判断 POST 域名,因为有漏洞可以绕开
function get_domain($url){
return current(explode('/',end(explode('://',$url,2)),2));
}
//https://do-op.work/notebook/?post=163
// 得到 do-op.work