我正在考虑一种阻止跨站点请求伪造攻击的方法,作为我的安全编码类的一部分。
我在想,如果我可以阻止尝试连接到我的网站,其地址不同于该网页所在的地址......但这会有效吗?如果没有,那会有什么更好的方法?
如果我尝试这样做会怎么样?
// assuming my page is still on 192.168.195.128
if($_SERVER['REQUEST_METHOD'] == 'POST' &&
$_SERVER["HTTP_HOST"] != "192.168.195.128")
{
echo 'Cross-site request forgery attempt!';
}
else
{
// continue normal execution
}
答案 0 :(得分:3)
不,这对阻止CSRF没有任何作用。
您需要的是某种传递给用户的令牌,以便在表单提交时发回。此令牌只能在特定位置使用一次。
CSRF通过向当前用户所在的不同站点发送通用请求来工作,通常利用它们已经过身份验证以及站点上没有受到攻击的事实。这些请求来自用户的浏览器,看起来就像普通请求一样。您可以检查引荐来源,但通常认为表单中传递的简单令牌更好。