7

我们目前正在开发一个完全基于 AJAX 的应用程序,它将通过 RESTful API 与服务器交互。我已经考虑了防止针对 API 的 XSRF 攻击的潜在方案。

  1. 用户进行身份验证并接收一个会话 cookie,该 cookie 也会随每个请求一起双重提交。

  2. 我们在 Javascript 中实现 OAuth 消费者,在用户登录时检索令牌,并使用该令牌签署所有请求。

我倾向于 OAuth 方法,主要是因为我想提供对我们 API 的第 3 方访问,并且我宁愿不必实现两个身份验证方案。

在这种情况下 OAuth 消费者是否有任何理由无法工作?

4

3 回答 3

4

大多数 AJAX 库会设置一个额外的标头“X-Requested-With: XMLHttpRequest”,这在基本的 XSRF 攻击中很难伪造(尽管如果与 XSS 结合使用可能)。如果您希望所有请求都是 AJAX,那么验证此标头是否存在是一个很好的纵深防御策略。

于 2010-09-09T19:30:01.227 回答
1

使用两步请求,第一个请求服务器一个不可预测的令牌,第二个请求带有令牌的实际操作。

由于攻击者无法预测令牌,也无法读取它(同源策略),因此他无法在第二个查询中给出有效令牌。

但请注意不要泄漏令牌(了解如何在它们影响全局变量的值时使用捕获 json 等)并阅读:

http://www.google.com/search?q=xsrf+defence

于 2010-09-10T07:59:47.860 回答
0

防止 XSRF 的最简单方法是检查每个 RESTful 请求的引用者,以确保请求来自同一个域。会话 cookie 对于保持状态很重要,但它不会防御 XSRF,因为它也会与伪造的请求一起发送。在内存需求有限的嵌入式网络硬件上常见基于引用的 XSRF 保护系统,摩托罗拉在其大部分硬件上使用这种方法。这不是最安全的 XSRF 保护,基于令牌的保护更好,但两个系统仍然可以通过 XSS 绕过。基于令牌的 XSRF 保护的最大问题是需要花费大量时间返回并修复每个请求,并且您可能会错过一些请求。

确保阅读同源策略扫描您的站点以查找 xss。您还应该阅读 OWASP Top 10 for 2010 A3-Broken Authentication and Session Management

于 2010-05-06T09:17:49.457 回答