我试图保护我的.NET网站免受CSRF攻击,在每个表单中使用一个隐藏密钥和一个特殊的temp,所以当用户发布表单时,我可以比较表单中的temp键和隐藏键。
但是我不想使用Session
或其他共享对象来保存这些临时密钥,所以我想出了这样的方法:
1. The cookie value and hidden form value are the same.
2. Can obtain an [userId] from the decrypted value, and it's the current user id.
3. Can obtain a [DateTime] from the decrypted value.
4. [DateTime] obtained is not more than 15 min old.
你看到什么瑕疵了吗?
致以亲切的问候。
发布于 2011-01-17 14:33:30
您所描述的策略一般起作用,被称为"双重提交饼干“。但是有几件事你应该知道
发布于 2011-01-17 14:32:20
为什么不使用内置的ViewState用户密钥呢?用用户的登录名填充它,您就完成了。然而,这并没有过期。
如果您没有经过身份验证的用户,或者不喜欢这种方法,因为您不喜欢viewstate,那么您可以编写一个HTTP,它插入一个隐藏的表单字段,就像我在codeplex上编写和发布的那个字段一样--您应该能够在到期时调整它。
https://stackoverflow.com/questions/4714016
复制相似问题