AJAX风格应用程序中的XSRF保护

AJAX风格应用程序中的XSRF保护,ajax,security,oauth,csrf,Ajax,Security,Oauth,Csrf,我们目前正在开发一个完全基于AJAX的应用程序,它将通过restfulapi与服务器交互。我已经考虑了针对API的XSRF攻击的潜在方案 用户验证并接收 会话cookie,它也是 每次请求都提交两次 我们在中实现了OAuth使用者 Javascript,在 用户登录,并在所有 使用该令牌的请求 我倾向于OAuth方法,主要是因为我希望提供对API的第三方访问,并且我不希望实现两个身份验证方案 OAuth使用者在这种情况下不能工作有什么原因吗?防止XSRF it的最简单方法是检查每个RESTful

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

  • 用户验证并接收 会话cookie,它也是 每次请求都提交两次

  • 我们在中实现了OAuth使用者 Javascript,在 用户登录,并在所有 使用该令牌的请求

  • 我倾向于OAuth方法,主要是因为我希望提供对API的第三方访问,并且我不希望实现两个身份验证方案


    OAuth使用者在这种情况下不能工作有什么原因吗?

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


    请务必仔细阅读和至。您还应该阅读2010年OWASP前10名。

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

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

    由于攻击者无法预测令牌,也无法读取令牌(同源策略),因此无法在第二次查询中提供有效的令牌

    但要小心不要泄漏标记(了解如何在标记影响全局变量的值时使用捕获json等)并读取: