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

时间:2015-07-25 11:17:59

标签: rest authentication http-headers csrf restful-authentication

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

但是,我认为这种保护毫无用处,我们应该在 REST API 的情况下将其删除,在每个操作的标头中都需要身份验证令牌

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

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

所以在这种情况下,我想让您对这个问题有一个观点:我们可以从这种API设计中删除CSRF令牌保护吗?

2 个答案:

答案 0 :(得分:6)

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

您需要对Cookie,基本,Windows,摘要和客户端证书身份验证方案进行CSRF保护,因为这些会自动添加到浏览器中。

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

答案 1 :(得分:0)

从理论上讲,您不需要如上所述的CSRF保护。但是我主要关心的问题之一是访问令牌的存储位置。浏览器的本地存储不能提供良好的安全性。因此,它通常存储在cookie中。因此,CSRF漏洞又回来了。

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

总结一下:访问令牌的有效负载存储在cookie中,JavaScript可以访问该cookie。访问令牌的签名存储在JavaScript不能访问的Cookie中。 客户端从cookie中读取有效负载,并将其在Authentication-Header中传递给服务器。服务器根据HttpOnly cookie中发送的签名来验证令牌。

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