Codeigniter避免CRSF攻击

时间:2018-06-26 06:16:39

标签: php codeigniter csrf

我尝试了两种方法:

-使用form_open:通过这种方法,我可以在请求标头以及cookie中添加带有CSRF令牌的字段。但是每次都会生成相同的CSRF令牌,因此无法阻止攻击。

除了在客户端添加令牌之外,我还需要知道是否需要在服务器端检查令牌或它会自动完成。

-使用带有自定义表单标签的隐藏输入字段:这样,我添加了一个随机标记作为输入字段,仍然无法避免攻击。

对于第二种方法,我需要知道我们需要在Security.php文件中进行的更改,以及是否需要进行任何服务器端检查的情况。

1 个答案:

答案 0 :(得分:0)

建议采用第一种方法,主要是因为CI代码是经过测试的,久经考验的代码。我认为第二种方法是您打算自己编写的东西。如果是这种情况,您无缘无故地在重新发明轮子。

使用CI代码,重要的是要了解令牌的哈希值不会改变,除非您在config.php中使用以下内容

$config['csrf_regenerate'] = TRUE;

您需要知道的另一件事是,仅当对服务器发出POST请求时才会生成新的哈希。很好,因为对CSRF保护的需求仅与POST请求有关。

在发出多个GET请求时,即连续加载<form>多次时,您每次可能会看到相同的哈希值。但是,如果您提交表单然后重新加载,则会看到一个新的哈希值。

最后,您应该知道,仅针对POST个请求检查CSRF值,而不针对GET个请求检查CSRF值。

成功验证后,哈希值将从$_POST中删除。

如果您将$config设置与form_open()结合使用,上述所有操作都会自动发生。