概念
跨站请求伪造(英语:Cross-site request forgery),也被称为one-clickattack或者session riding,通常缩写为CSRF或若XSRF,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF利用的是网站对用户网页浏览器的信任。
跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
从Spring Security4.0开始,默认情况下会启用CSRF保护,以防止CSRF攻击应用程序,Spring Security CSRF会针对PATCH,POST,PUT和DELETE方法进行防护。
SpringSecurity的CSRF实现
1.生成csrfToken保存到HttpSession或Cookie中。
2.请求到来时,从请求中提取cstfToken,和保存的csrfToken做比较,进而判断当前请求是否合法。主要通过CsrfFilter过滤器来完成。
代码实现
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
//关闭csrf保护功能
//http.csrf().disable();