codeigniter的CSRF保护不阻止多个表单提交吗?


Does CodeIgniter's CSRF protection not prevent multiple form submits?

我将CSRF保护选项设置为TRUE并使用form_open()。隐藏输入显示成功。但是,如果我提交表单,然后按"返回"并再次提交,它允许再次提交表单!是编码器设置有问题,还是应该是这样的?

现在,我发现自己正在实现自己的令牌系统,该系统使用会话变量检查隐藏的post输入。我觉得我现在也在自己实现CSRF。如果我按照我的方式去做,还需要CI的实现吗?

将CSRF设置为true将自动将随机散列添加到form_open()中,但它仅在必要时重新生成,并且取决于您使用的浏览器将决定返回按钮的行为。如果它返回没有刷新,那么你的哈希应该是不正确的,如果它发送一个http请求,那么它会更新令牌。

你在这里提到的并不是一个真正的故障,因为CSRF是为了防止跨站点伪造而工作的,但问题是其他的东西,大多数是通过Post/Redirect/Get (PRG模式)来修复的。这种方式会重定向或有一个无效的CSRF,并允许你从会话或Post中刷新数据,如果你不使用flash数据。