这会阻止跨站点请求伪造吗?

时间:2013-11-27 06:19:13

标签: php security csrf

我正在考虑一种阻止跨站点请求伪造攻击的方法,作为我的安全编码类的一部分。

我在想,如果我可以阻止尝试连接到我的网站,其地址不同于该网页所在的地址......但这会有效吗?如果没有,那会有什么更好的方法?

如果我尝试这样做会怎么样?

// 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
}

1 个答案:

答案 0 :(得分:3)

不,这对阻止CSRF没有任何作用。

您需要的是某种传递给用户的令牌,以便在表单提交时发回。此令牌只能在特定位置使用一次。

CSRF通过向当前用户所在的不同站点发送通用请求来工作,通常利用它们已经过身份验证以及站点上没有受到攻击的事实。这些请求来自用户的浏览器,看起来就像普通请求一样。您可以检查引荐来源,但通常认为表单中传递的简单令牌更好。