防止 CSRF 的方法之一是在表单中使用令牌。在浏览了很多文章之后,我发现这些步骤通常是这样的:
- 生成一个加密的令牌值,将其存储在会话中,将令牌值设置在表单的隐藏字段中。
- 在表单处理页面中,比较隐藏字段中的令牌值和会话值是否相等,如下所示: $_POST['token'] == $_SESSION['token']
我的问题是我为什么要加密令牌值?假设我正在使用 GET 方法并且攻击者知道我将使用一个介于 1 到 1000 之间的简单整数值。如果攻击者要使用图像来伪造请求,那么他将不得不发送 1000 个图像蛮力请求..对吗?还是有其他方法可以做到这一点?
我还读到单独使用 POST 方法不足以阻止 CSRF 请求。所以我的第二个问题是,如果这是真的,如果我使用 POST 方法,攻击者如何成功创建伪造请求?