微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Springboot和Angular的CSRF防御

CSRF 是什么

跨站请求伪造

知乎解答搬运: csrf是什么.

Springboot CSRF

在spring boot中可以使用spring security的filter防止CSRF攻击。
通过 new CsrfFilter(new CookieCsrftokenRepository())
new CsrfFilter(new HttpSessionCsrftokenRepository())
可分别生成和验证存于Cookie和Session的XSRF-TOKEN。

  • 所需依赖:
<dependency>
  <groupId>org.springframework.security</groupId>
  <artifactId>spring-security-web</artifactId>
</dependency>
  • 配置类
@Configuration
public class FilterConfiguration {
    
    @Bean
    public FilterRegistrationBean csrfFilter() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new CsrfFilter(new HttpSessionCsrftokenRepository()));
        registration.addUrlPatterns("/*");
        return registration;
    }
}
  • 浏览器

Cookie中的XSRF-TOKEN

Angular CSRF

Angular对CSRF防御的支持认的。

Angular官方文档: cross-site-request-forgery.

在跨站请求伪造(XSRF 或 CSFR)中,攻击者欺骗用户,让他们访问一个假冒页面(例如 evil.com), 该页面带有恶意代码,秘密的向你的应用程序服务器发送恶意请求(例如 example-bank.com)。

假设用户已经在 example-bank.com 登录用户打开一个邮件,点击里面的链接,在新页面中打开 evil.com。

该 evil.com 页面立刻发送恶意请求到 example-bank.com。这个请求可能是从用户账户转账到攻击者的账户。 与该请求一起,浏览器自动发出 example-bank.com 的 cookie。

如果 example-bank.com 服务器缺乏 XSRF 保护,就无法辨识请求是从应用程序发来的合法请求还是从 evil.com 来的假请求。

为了防止这种情况,你必须确保每个用户的请求都是从你自己的应用中发出的,而不是从另一个网站发出的。 客户端和服务器必须合作来抵挡这种攻击。

常见的反 XSRF 技术是服务器随机生成一个用户认证令牌到 cookie 中。 客户端代码获取这个 cookie,并用它为接下来所有的请求添加自定义请求页头。 服务器比较收到的 cookie 值与请求页头的值,如果它们不匹配,便拒绝请求。

这个技术之所以有效,是因为所有浏览器都实现了同源策略。只有设置 cookie 的网站的代码可以访问该站的 cookie,并为该站的请求设置自定义页头。 这就是说,只有你的应用程序可以获取这个 cookie 令牌和设置自定义页头。evil.com 的恶意代码不能。

Angular 的 HttpClient 对这项技术的客户端部分提供了内置的支持

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐