我尝试了两种方法:
-使用form_open:通过这种方法,我可以在请求标头以及cookie中添加带有CSRF令牌的字段。但是每次都会生成相同的CSRF令牌,因此无法阻止攻击。
除了在客户端添加令牌之外,我还需要知道是否需要在服务器端检查令牌或它会自动完成。
-使用带有自定义表单标签的隐藏输入字段:这样,我添加了一个随机标记作为输入字段,仍然无法避免攻击。
对于第二种方法,我需要知道我们需要在Security.php文件中进行的更改,以及是否需要进行任何服务器端检查的情况。
答案 0 :(得分:0)
建议采用第一种方法,主要是因为CI代码是经过测试的,久经考验的代码。我认为第二种方法是您打算自己编写的东西。如果是这种情况,您无缘无故地在重新发明轮子。
使用CI代码,重要的是要了解令牌的哈希值不会改变,除非您在config.php中使用以下内容
$config['csrf_regenerate'] = TRUE;
您需要知道的另一件事是,仅当对服务器发出POST
请求时才会生成新的哈希。很好,因为对CSRF保护的需求仅与POST
请求有关。
在发出多个GET
请求时,即连续加载<form>
多次时,您每次可能会看到相同的哈希值。但是,如果您提交表单然后重新加载,则会看到一个新的哈希值。
最后,您应该知道,仅针对POST
个请求检查CSRF值,而不针对GET
个请求检查CSRF值。
成功验证后,哈希值将从$_POST
中删除。
如果您将$config
设置与form_open()
结合使用,上述所有操作都会自动发生。