将 CSRF 令牌存储在 cookie 中是否足以防止 CSRF?
Is storing CSRF token in cookie enough to prevent CSRF?
为了防止 CSRF,Spring 安全和 AngularJS 使用一种方法将 CSRF 令牌存储在 cookie 中。然后,对于每个请求,Web 客户端将与 cookie 和 HTTP header 相同的令牌发送到服务器以进行验证。这些来自这个博客。 https://spring.io/blog/2015/01/12/the-login-page-angular-js-and-spring-security-part-ii#csrf-protection
不过,我认为从另一方面来说,黑客可以伪造 cookie 和 HTTP header 来发送一个伪造的请求。这是正确的吗?
我从 ASP 用于验证防伪令牌的 CSRF 令牌的 .net 端了解到,将有两个地方存储此令牌。
1. 在页面中,当从angular发出请求时,我们将在请求header.
中包含此令牌
2.在cookie中,当浏览器触发时会被请求自动获取。
在服务器端,当收到请求时,服务器将解密两个令牌并验证请求,如果它们之间有有意义的关系(这种关系在服务器中用算法决定)。
现在,在这里,攻击者无法不惜任何时间找出这 2 个字符串,因为防伪验证算法未公开,每次在 go.And 上生成新字符串时,第二件事是我认为攻击者不能直接将 cookie 包含在请求中,因为 cookie 是从浏览器中获取的。他们可能是做到这一点的工具。但除非使用的算法不被公开,否则攻击者无法完成 csrf 攻击。
我认为 Java spring 方面可能也是如此。
为了防止 CSRF,Spring 安全和 AngularJS 使用一种方法将 CSRF 令牌存储在 cookie 中。然后,对于每个请求,Web 客户端将与 cookie 和 HTTP header 相同的令牌发送到服务器以进行验证。这些来自这个博客。 https://spring.io/blog/2015/01/12/the-login-page-angular-js-and-spring-security-part-ii#csrf-protection
不过,我认为从另一方面来说,黑客可以伪造 cookie 和 HTTP header 来发送一个伪造的请求。这是正确的吗?
我从 ASP 用于验证防伪令牌的 CSRF 令牌的 .net 端了解到,将有两个地方存储此令牌。
1. 在页面中,当从angular发出请求时,我们将在请求header.
中包含此令牌
2.在cookie中,当浏览器触发时会被请求自动获取。
在服务器端,当收到请求时,服务器将解密两个令牌并验证请求,如果它们之间有有意义的关系(这种关系在服务器中用算法决定)。
现在,在这里,攻击者无法不惜任何时间找出这 2 个字符串,因为防伪验证算法未公开,每次在 go.And 上生成新字符串时,第二件事是我认为攻击者不能直接将 cookie 包含在请求中,因为 cookie 是从浏览器中获取的。他们可能是做到这一点的工具。但除非使用的算法不被公开,否则攻击者无法完成 csrf 攻击。
我认为 Java spring 方面可能也是如此。