2013-02-27 50 views
2

我设置了CSRF保护选项设置为TRUE,并使用form_open()。隐藏的输入显示成功。但是,如果我提交表单,然后按“返回”并再次提交,它允许表单再次提交! codeigniter设置有问题吗,还是应该是这样?CodeIgniter的CSRF保护不会阻止多个表单提交吗?

现在,我发现自己是执行,检查与会话变量隐藏后输入自己的代币系统。我觉得现在我自己也在实施CSRF。如果我按照自己的方式行事,是否还需要CI的实施?

回答

2

CSRF设置为true,将自动随机哈希添加到您的form_open(),但它只是作为再生必要的,这取决于你用什么浏览器将决定后退按钮的行为。如果返回时没有刷新,那么你的哈希应该是不正确的,如果它发送一个http请求,那么它将更新该令牌。

你在这里提到什么是不是真正的故障,因为CSRF正在工作,旨在防止跨站点伪造,但问题是别的东西大部分固定用邮政/重定向/获取(PRG pattern)这样回击要么重定向或者有一个无效的CSRF,并且如果您没有使用闪存数据,您可以从会话或帖子中清除数据。

+0

不知道我理解你100%。即使使用重定向,我也可以使用浏览器的历史记录返回两页而不是一页,回到原始页面。从那里我可以再次提交,而目前的CSRF实施并没有阻止这种情况的发生。所以我又回到了原来的问题。我错过了什么吗? – 2013-02-27 20:20:11

+0

后退按钮的使用不是跨站请求伪造所以回答你的问题“是否CodeIgniter的CSRF保护不能防止多表单提交?”是否,因为点击后退按钮不是CSRF。您正在使用会话或flashdata来帮助您正确的轨道,并且您也必须在CI,Cake或Yii或Laravel中尽我所能完成此操作。关于如何以及何时启用/禁用对表单的访问的标准可能因表单而异,所以我不会期望这将在IMO的框架中。 – dasper 2013-02-27 22:19:05

+0

是的,这是有道理的,谢谢。如果我走这条路,使用会话(是这样的:http://stackoverflow.com/a/4614123/371699),是仍然存在任何需要使用CodeIgniter的内建CSRF保护?当然,这条路线也可以防止任何没有正确标记的请求? – 2013-02-28 15:45:55