由于网站安全扫描中可能存在的安全性问题。需要禁用WebDAV,或者说是对http中的一些方法的禁用。
2.问题复显
在未限制DELETE等方法前(即未做上述web.xml的内容的添加之前),测试http的DELETE方法的效果,方式如下:
第一步:
在Tomcat的web.xml 文件中配置org.apache.catalina.servlets.DefaultServlet的初始化参数
readonly参数默认是true,即不允许delete和put操作,所以默认的通过XMLHttpRequest对象的put或者delete方法访问就会报告 http 403 forbidden 错误。
第二步:
从客户端通过 Ajax XMLHTTPRequest 发起 DELETE/PUT 请求,利用AJAX的方式调用DELETE,
Jsp页面添加:
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
function getXMLHTTPRequest(){
if (XMLHttpRequest) {
return new XMLHttpRequest();
} else {
try{
return new ActiveXObject('Msxml2.XMLHTTP');
}catch(e){
return new ActiveXObject('Microsoft.XMLHTTP');
}
}
}
var req = getXMLHTTPRequest();//DELETE
req.open('DELETE','http://localhost:8080/images/play/1.png',false);
req.setRequestHeader(header, token);
req.send(null);
//req.send({ form: 'data' });
document.write(req.responseText);
document.write(req.responseText);这一句既是调用了Ajax,也是将删除的1.png返回回来,删除成功 (已看到效果)。Tomcat文件中1.png已经被删除
3.问题解决
在tomcat下的应用程序中web.xml中添加如下的代码
修改应用中的web.xml就只针对本应用起作用,修改tomcat中的web.xml就可以对启动在该tomcat下所有的应用起作用。
应用后的效果,请求 Access to the requested resource has been denied,会被拒绝
4.安全拓展
Spring Security 4.0之后,引入了CSRF,默认是开启。CSRF默认支持的方法: GET|HEAD|TRACE|OPTIONS,不支持POST。
客户端访问服务端会首先发起get请求,这个get请求在到达服务端的时候,服务端的Spring security会有一个过滤 器 CsrfFilter去检查这个请求,如果这个request请求的http header里面的X-CSRF-COOKIE的token值为空的时候,服务端就好自动生成一个 token值放进这个X-CSRF-COOKIE值里面,客户端在get请求的header里面获取到这个值,如果客户端有表单提交的post请求,则要求客户端要 携带这个token值给服务端,在post请求的header里面设置_csrf属性的token值,提交的方式可以是ajax也可以是放在form里面设置hidden 属性的标签里面提交给服务端,服务端就会根据post请求里面携带的token值进行校验,如果跟服务端发送给合法客户端的token值是一样的,那么 这个post请求就可以受理和处理,如果不一样或者为空,就会被拦截。由于恶意第三方可以劫持session id,而很难获取token值,所以起到了 安全的防护作用。