当前位置:  开发笔记 > 编程语言 > 正文

了解CSRF

如何解决《了解CSRF》经验,为你挑选了4个好方法。

我不明白使用"挑战令牌"会增加任何形式的预防:应该将什么价值与什么相比较?

来自OWASP:

通常,开发人员只需为当前会话生成一次此令牌.在初始生成此令牌之后,该值将存储在会话中,并用于每个后续请求,直到会话到期为止.

如果我正确理解了这个过程,就会发生这种情况.

我在http://example.com登录,并创建包含此随机令牌的会话/ cookie.然后,每个表单都包含一个隐藏的输入,该输入也包含会话中的这个随机值,在表单提交时与会话/ cookie进行比较.

但那取得了什么成果呢?您是不是只是将会话数据放入页面,然后将其与完全相同的会话数据进行比较?似乎像循环推理.这些文章一直在谈论遵循"同源策略",但这没有任何意义,因为所有CSRF攻击都与用户起源相同,只是诱使用户采取他/她不打算采取的行动.

除了将令牌作为查询字符串附加到每个URL之外,还有其他选择吗?看起来非常丑陋且不切实际,并且使用户的书签更难.



1> rogeriopvl..:

攻击者无法获取令牌.因此请求不会产生任何影响.

我推荐Gnucitizen的这篇文章.它有一个相当不错的CSRF解释:http://www.gnucitizen.org/blog/csrf-demystified/



2> rook..:

你需要继续为自己研究这个主题,但我想这就是你发布到SO :)的原因. CSRF是一种非常严重且广泛存在的漏洞类型,所有Web应用程序开发人员都应该了解这一类型

首先,有不止一个相同的原产地政策.但最重要的部分是http://whatever.com托管的脚本无法从http://victom.com读取数据,但它可以通过POST和GET发送数据.如果请求仅包含攻击者已知的信息,则攻击者可以在victom的浏览器上伪造请求并将其发送到任何地方.以下是构建不包含随机令牌的请求的3个XSRF漏洞.

如果站点包含随机令牌,则必须使用XSS绕过同源策略提供的保护.使用XSS可以强制javascript从另一个域"发起",然后它可以使用XmlHttpRequest来读取令牌并伪造请求.这是我写的一个漏洞就是这样做的.



3> BKSpurgeon..:

CSRF用类比解释 - 示例:

想象一下,你正在用钥匙打开你的前门 - 你的钥匙.别人没有你的钥匙.你打开门 - 但在你进去之前,你的邻居在马路对面叫你,你们两人都对天气或者特朗普总统的最新凌晨3.45上午的推文进行了非常友好的谈话.当你正在进行这次谈话时,你并不知道你,别人看到你在外面,并决定穿着相同的衣服和发型冒充你,并决定假装成你自己的房子!

在你家里面没有人注意到任何不同的东西 - 你的妻子就像,'哦crud*,他是家.

模仿者可以帮助自己赚到所有的钱,也许在出去的时候玩一些Xbox,没有人会更聪明.

CSRF基本上依赖于这样一个事实:你打开房门,然后把它打开,允许其他人简单地走进来假装是你.

解决这个问题的方法是什么?

当你第一次打开你家的门时,你的门上写着一张纸上写着一个长而随机的数字:

"ASDFLJWERLI2343234"

现在,如果你想进入自己的房子,你必须把那张纸送到门口才能进去.

所以现在当模仿者试图进入你的房子时,门人问道:

"写在纸上的随机数是多少?"

如果模仿者没有正确的号码,那么他就不会进入.无论是那个还是他必须正确猜出随机数 - 这是一项非常艰巨的任务.更糟糕的是随机数只有20分钟有效(例如).因此,要知道模仿者必须正确猜测,不仅如此,他只有20分钟才能得到正确的答案.这太费劲了!所以他放弃了.

当然,这个比喻有点紧张,但我希望它对你有所帮助.

**crud =(创建,读取,更新删除)



4> Sripathi Kri..:

除了将令牌作为查询字符串附加到每个URL之外,还有其他选择吗?看起来非常丑陋且不切实际,并且使用户的书签更难.

只要您确保网站上的所有GET请求都是只读的,就没有理由将令牌附加到您网站上的每个网址.如果您使用GET请求修改服务器上的数据,则必须使用CSRF令牌保护它.

CSRF的有趣之处在于,虽然攻击者可以向您的站点发出任何http请求,但他无法回读响应.

如果您有没有随机令牌的GET URL,攻击者将能够发出请求,但他将无法回读响应.如果该URL更改了服务器上的某些状态,则攻击者的工作已完成.但是如果只是生成了一些html,那么攻击者就什么都没有获得,而你却什么也没有丢失.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有