我正在考虑一种方法来阻止跨站点请求伪造攻击,作为我的安全编码类的一部分。
我在想,如果我可以阻止连接到我的网站的尝试,地址与该页面所在的地址不同……但这可行吗?如果没有,还有什么更好的方法呢?
如果我这样做作为我的尝试:
// 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
}
不,这不会阻止CSRF。
您需要的是传递给用户的某种令牌,以便在表单提交时发送回。此令牌只能在特定位置使用一次。
CSRF的工作原理是向用户当前所在的不同站点发送通用请求,通常利用他们已经通过身份验证以及不在被攻击站点上的内容这一事实。这些请求来自用户的浏览器,看起来就像普通的请求。您可以检查引用人,但通常认为表单中传递的简单令牌更好。