【发布时间】:2011-01-17 14:02:54
【问题描述】:
我正在尝试使用每个表单中的隐藏密钥和特殊的临时 cookie 来保护我的 .NET 网站免受 CSRF 攻击,因此当用户发布表单时,我可以比较临时 cookie 密钥和隐藏密钥表格。
但我不想使用Session 或其他共享对象来保留这些临时密钥,所以我想出了这种方式:
- 浏览器请求表单 (GET)。
- App生成密钥,[userId] + [currentDateTime],对称 用我的应用程序的密钥加密 知道。
- 应用程序将该键放在隐藏字段中 在表格中,并发送了一个cookie 那把钥匙也是。浏览器 POST 表单。
-
应用程序确保:
- cookie 值和隐藏表单值相同。
- 可以从解密后的值中得到一个[userId],就是当前的用户id。
- 可以从解密后的值中获取[DateTime]。
- 获得的 [DateTime] 不超过 15 分钟。
否则,拒绝 POST 并显示错误。
你看出什么缺陷了吗?
亲切的问候。
【问题讨论】:
-
为什么不直接使用“UserKey”?