2011-04-24 74 views
1

我做了一个方法,通过在会话和表单中保存随机标记值来防止“表单crf攻击”,并在“post action”中比较这两个值,..我在每个php页面的顶部提供了比较函数,表单crf攻击有什么动作?

我的问题是:如果比较进程faild,并且令牌会话值和token值不一样! ,那么剧本必须做什么动作?是通过“死()”来停止脚本工作。 ?或者什么是最好的行动?

感谢,

回答

0

如果这是不太可能从一个真实的用户情况发生的话,我会阻止脚本保存/恢复任何数据,但如果它工作,我会返回一个“成功”的消息。如果您返回失败,它将帮助黑客确定您的验证是如何编码的。另一方面,如果真实用户遇到这种情况,我会返回一个友好的错误,并可能要求他们再次登录。

+0

@ Jason4Ever你最终决定做什么? – 2011-04-28 22:57:30

0

是的。只是让它失败。恢复这种错误没有意义。

什么,但是你应该做的是也写了日志条目审核潜在利用企图:

syslog(LOG_ERR, "CSRF token mismatch ..."); 
die("Request failed. (Disabled cookies?) Contact administrator: ..."); 

包括一个humd可读的消息的情况下,这是一个真正的浏览器错误或东西。但不要公开说它是失败的CSRF标志。

+0

好,我这样做的,但问题是很多次这个问题发生,因为标记值会话超时或用户打开新标签时更改!所以它以新的令牌值开始新的会话! ,所以我不确定这个动作是否是正常人的攻击者! – Jason4Ever 2011-04-24 10:15:59

+0

好吧。这是一个完全不同的问题。编辑您的原始帖子以反映这一点。 - 无论如何,那么最好使用CSRF令牌数组。 '$ _SESSION [“csrf”] [] = $ new_token'并用于检查'in_array($ _ POST [“csrf”],$ _SESSION [“csrf”])''。关于会话超时,你无能为力。但是,这不是一个普遍的问题。 – mario 2011-04-24 10:27:55