【发布时间】:2010-09-13 23:24:17
【问题描述】:
我有一个会显示敏感信息的网站。我正在使用 Anti Forgery Tokens 等来防止 POSTS 中的 XSRF。但是我担心有人能够从 GET 中查看敏感信息。在 .Net MVC 2 中保护通过 GET 发送的只读数据的推荐做法是什么?
【问题讨论】:
标签: security asp.net-mvc-2 get csrf
我有一个会显示敏感信息的网站。我正在使用 Anti Forgery Tokens 等来防止 POSTS 中的 XSRF。但是我担心有人能够从 GET 中查看敏感信息。在 .Net MVC 2 中保护通过 GET 发送的只读数据的推荐做法是什么?
【问题讨论】:
标签: security asp.net-mvc-2 get csrf
如果您确定 GET 请求是只读的,那么您无需担心 XSRF。 just XSRF 不可能从另一个网站窃取信息,因此您不需要通过令牌保护 url。事实上,在 URL 中使用标记会导致无法使用书签。
话虽如此,您应该 100% 确定您的应用中没有 XSS 漏洞。如果有,攻击者就无需费心使用 XSRF 和不可预测的令牌。
【讨论】:
POST 数据的 XSRF 保护(使用你所说的令牌)也应该适用于 GET 数据。从黑客的角度来看,GET 伪造比 POST 伪造要容易得多(首先您只发布一个链接,其次您需要指向一个带有隐藏 iframe 和自动提交表单的恶意软件网站),但是如果它们都失败了检查令牌。
示例: 发布这样的链接:
www.domain.tld/page.aspx?get=data&token=token_given_to_hacker
不应该返回任何东西,或者对于那些获得其他令牌的人来说只是一个错误。这样就不会针对错误的人采取敏感行动。
这是xsrf,你不能窃取信息,而是让其他人提交表单并采取只有黑客知道的结果。例如: 将电子邮件表单上的电子邮件更改为黑客的电子邮件。假设您有一个 GET 表单,其中包含 1 个字段:新电子邮件(为简单起见)。提交后的 URL 如下所示:
www.domain.tld/page.aspx?email=myemail@otherdomain.tld
现在,如果黑客在您的论坛上发布带有 URL 的链接:
www.domain.tld/page.aspx?email=hackers_email@yetotherdomain.tld
点击它的每个人都会收到一封来自黑客的新电子邮件。但是,如果您在那里放置一个令牌,并且您每次都会检查它,那么只会对那些在页面请求中给出相同令牌的人采取行动,在这种情况下,该链接仅适用于发布它的用户,没有其他人。
您还可以使用密码字段保护敏感表单,例如更改电子邮件、密码等。请注意,验证码在这里没有太大帮助。
【讨论】: