繁体   English   中英

带有身份验证的 REST API 中的 CSRF 令牌

[英]CSRF Token in REST API with authentication

我了解CSRF 令牌保护的目的。

但是,我认为这种保护是无用的,如果REST API要求每个操作的标头中的身份验证令牌,我们应该将其删除。

这样,即使 Mallory 伪造了 Alice 的恶意 HTML 链接,攻击也无法完成。 原因是:

Alice 将她的身份验证信息保存在 Mallory 不知道的标头密钥中。 与 cookie 不同的是,Alice 的浏览器不会自动提交此身份验证令牌。

所以在这种情况下,我想请你谈谈这个问题:我们可以从这种 API 设计中删除 CSRF 令牌保护吗?

是的,当使用承载方案身份验证时,您不需要 CSRF 保护,因为浏览器不会自动将 Authorization 标头添加到请求中。

您确实需要针对 cookie、基本、Windows、摘要和客户端证书身份验证方案的 CSRF 保护,因为这些是由浏览器自动添加的。

另请参阅 Dominick Baier 关于隐式与显式身份验证的文章: http : //leastprivilege.com/2015/04/01/implicit-vs-explicit-authentication-in-browser-based-applications/

从理论上讲,您不需要像您描述的那样进行 CSRF 保护。 但我主要关心的问题之一是在哪里存储访问令牌。 浏览器的本地存储没有提供很好的安全性。 所以它通常存储在 cookie 中。 因此,CSRF 漏洞又回来了。

Jean-Christophe Baey 在他的文章中描述了一种双 cookie 机制,以防止来自 CSRF 的访问令牌和被 XSS 窃取。

总结那篇文章:访问令牌的有效负载存储在 JavaScript 可访问的 cookie 中。 访问令牌的签名存储在 JavaScript 无法访问的 cookie 中。 客户端从 cookie 中读取有效负载,并将其在 Authentication-Header 中传递给服务器。 服务器根据 HttpOnly cookie 中发送的签名验证令牌。

因此,它的 CSRF 保存和攻击者无法通过 XSS 窃取整个令牌,因为没有对签名的 JS 访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM