2010-04-01 64 views
1

在双重提交cookie csrf预防方案,是否需要为服务器提供cookie?客户端生成双重提交cookie,跨网站请求防伪

看来我可以在客户端页面上生成javascript并设置一个cookie“anti_csrf”,然后双击提交(一次作为cookie,由浏览器完成,一次在请求正文中)。

一个外地域将无法读取或写入“anti_csrf”cookie以将其包含在请求的主体中。

这是安全的,还是我俯视的东西?

回答

0

如果用户已经为您的域名设置了“anti_csrf”cookie,那么CSRF攻击者将免费回家! HTTP请求将通过 cookie发送出,当然,如果知道该值是什么,那么在POST中包含该参数很容易。

该Cookie 不必是一个秘密,但该cookie 必须是只知道向用户会话一个难以猜测的秘密。这样,攻击者不知道(也不能猜测)攻击HTTP事务的内容。

如果您将代码放在构成cookie值的页面上,那么您必须假定攻击者可以在您的站点上获得他/她自己的会话(即,有效的“真实”登录)并检查代码直接。如果很容易弄清楚客户端是如何生成cookie值的(对于任何人们所知的客户端解决方案,它都会是这样),那么攻击者再次可以在其攻击页面中包含正确的参数值一个攻击POST。

+0

你的意思是“这样,攻击者不知道”? – montrealist 2010-04-01 15:48:21

+0

是的;废话我以为我修好了!谢谢@dalbaeb – Pointy 2010-04-01 15:57:08

+0

“anti_csrf”cookie值将被设置为一个随机的N字符字符串。我不认为攻击者有这种猜测的现实可能性吗? – james 2010-04-01 16:08:24

0

第一眼看起来似乎很安全,但这意味着没有javascript的用户无法使用您的表单。

1

TGR,请阅读本:

http://jazzy.id.au/default/2010/09/20/cracking_random_number_generators_part_1.html

所有攻击者需要的是得到一个令牌或两头在外的随机数生成器,然后他们可以预测以后每一位以前的随机数,如果它是不是密码安全的。如果随机数的生成是在Javascript中完成的客户端,我不知道使用密码安全的随机数生成器的单个浏览器,所以他们只需要调用Math.random()几次,他们就可以计算出什么令牌是为您的cookie生成的。