CSRF攻击
当用户在浏览器访问服务器,服务器给用户返回一个表单时,用户的ticket身份凭证会存放在cookie当中,如果用户在提交表单前去浏览病毒网站,病毒网站会窃取cookie信息,获得凭证,此时表单提交的目标也是已知,所以病毒网站会通过post请求模拟用户发送请求,这样用户的财产安全就会受到侵犯。
Security底层防止CSRF攻击方式
非异步请求防止
当服务器想用户返回一个表单页面的时候,会顺便发送一个隐藏域,存储着tocken,是随机生成的,每次都是不同的,当CSRF攻击时候,虽然ticket凭证信息正确,但是tocken没法获取到,因此请求就会失败,当用户请求时即会成功。
异步请求防止
在html页面中加入meta
<!--访问该页面时,在此处生成CSRF令牌-->
<meta name="_csrf" th:content="${_csrf.token}">
<meta name="_csrf_header" th:content="${_csrf.headerName}">
在js中
//发送AJAX请求之前,将CSRF令牌设置到请求头当中
var token=$("meta[name="_csrf"]).attr("content");
var header=$("meta[name="_csrf_header"]).attr("content");
$(document).ajaxSend(function(e,xhr,options){
xhr.setRequestHeader(header,token);
});