【发布时间】:2015-05-19 16:23:56
【问题描述】:
我希望有人能够帮助我理解这个问题以及我是否需要采取任何额外的步骤来保护我的应用程序。
阅读此特定漏洞,它似乎会影响符合以下条件的服务器:
- 从使用 HTTP 级压缩的服务器提供服务
- 在 HTTP 响应正文中反映用户输入
- 在 HTTP 响应正文中反映机密(例如 CSRF 令牌)
似乎缓解步骤,按有效性顺序是:
- 禁用 HTTP 压缩
- 从用户输入中分离秘密
- 根据请求随机化秘密
- 屏蔽秘密(通过 XORing 与每个请求的随机秘密有效地随机化)
- 使用 CSRF 保护易受攻击的页面
- 长度隐藏(通过在响应中添加随机字节数)
- 对请求进行速率限制
在我的页面视图中,我正在调用辅助方法@Html.AntiForgeryToken,它在我访问表单时创建相应的输入和cookie。从查看此辅助方法的作用来看,似乎每次加载页面时都会创建一个新的唯一令牌,这似乎符合缓解步骤中的第 3 点,并且首先使用 CSRF 令牌的行为符合第 5 点.
禁用 HTTP 压缩似乎被广泛认为“不利于性能”,从我一直在阅读的其他一些资源来看,长度隐藏可能会导致文件上传(本页面使用)等功能出现问题
所以,毕竟,我现在唯一能真正看到的就是将秘密与用户输入分开。我考虑过可能尝试将 CSRF 令牌值放入会话中......或者我是否完全过度思考这一点,'@Html.AntiForgeryToken` 的当前实现是否足以保护我们?
【问题讨论】:
-
禁用动态页面的 HTTP 压缩并确定它是否会影响您的性能。 (可能不会。)
-
@minitech 我正在托管此应用程序的当前 IIS 服务器,甚至没有安装动态内容模块
-
我不知道那是什么。 “动态页面”指的是该评论中的“不是静态资源的东西”。
-
我有同样的问题,很想找到任何答案。 AntiForgeryToken() 助手听起来确实每次都应该改变响应,我认为这应该可以解决问题。此外,它发生在一个甚至没有像密码这样的秘密的页面上。在一个只有纯文本用户输入字段的页面上。
-
我不明白你真正想做什么。你的最终目的是什么(例如主要问题是什么?)
标签: c# asp.net-mvc security csrf