这个东西去年的安全扫描都没有,今天就扫出来了,很是奇怪的一个东西。好吧,找资料找缘由。结果可能应为搜索名词的缘由,这个问题在群友的帮助下解决了。html
在我理解中servlet只有post和get方法,而后结果怎么出来这么多奇奇怪怪的方法呢。这些方法干啥的呢?java
首先找到的是一个禁用http下不安全的方法的博客,具体谁的博客我也没关注。先按照他的方法修改,修改方法也挺简单,改下tomcat的web.xml就好。web
- <security-constraint>
- <web-resource-collection>
- <http-method>HEAD</http-method>
- <http-method>PUT</http-method>
- <http-method>DELETE</http-method>
- <http-method>OPTIONS</http-method>
- <http-method>TRACE</http-method>
- <url-pattern>/*</url-pattern>
- </web-resource-collection>
- <auth-constraint>
- <role-name></role-name>
- </auth-constraint>
- </security-constraint>
<security-constraint> <web-resource-collection> <http-method>HEAD</http-method> <http-method>PUT</http-method> <http-method>DELETE</http-method> <http-method>OPTIONS</http-method> <http-method>TRACE</http-method> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name></role-name> </auth-constraint> </security-constraint>
为啥要加这个呢!找了下web.xml的说明tomcat
WebDAV (Web-based Distributed Authoring and Versioning)是基于 HTTP 1.1 的一个通讯协议。它为 HTTP 1.1 添加了一些扩展(就是在 GET、POST、HEAD 等几个 HTTP 标准方法之外添加了一些新的方法),使得应用程序能够直接将文件写到 Web Server 上,而且在写文件时候能够对文件加锁,写完后对文件解锁,还能够支持对文件所作的版本控制。这个协议的出现极大地增长了 Web 做为一种创做媒体对于咱们的价值。基于 WebDAV 能够实现一个功能强大的内容管理系统或者配置管理系统。 安全
好吧,这样就理解了,既然是一个通信协议增长了这些方法,那么按博主的方法改掉就行了。post
惋惜事与愿违,使用AppScan扫描仍是存在这个问题。那么就纳闷了,为啥会出现这样的状况呢?测试
因而找到了ui
AppScan问题“HTTP动词篡改致使的认证旁路”的解决方法
这篇博客,这个里面提供的思路不错,看得出来他也配置了web.xml。这样看起来要升级tomcat的节奏?
若是要升级tomcat我讲面临和那个博主同样的问题,公司层面很差解决,并且公司也不仅是用tomcat。其余的应该也存在问题。
从上面能够明显看出来这个漏洞和WebDAV 这个东西其实关系并不大,主要问题在于篡改,WebDAV 只是提供了一些方法,这些方法虽然会致使一些修改或者什么的问题。可是若是是篡改了一个不存在的方法,其实结果也是同样。好吧,其实上面那个博客最大的好处不是认识到了问题的根源,而是找到一个测试神器burpsuite。不再用苦逼的猜了。
好吧,那么就剩下一个办法,那就是本身写拦截器。拦截住除开get和post的方法。为啥不在web.xml配置这个?由于我试过了配置了以后我本身都登录不上。
谁配置成功了能够告诉我,我是拿如今这个6.0的tomcat毫无办法。之后考虑升级到9.0。
写拦截器去了,祝福我能成功。
ok,今天加了拦截器,成功干掉了这个问题。
- <span style="white-space:pre"> </span> String method = req.getMethod();
- if(!"GET".equals(method)&&!"POST".equals(method)&&!"HEAD".equals(method))
- {
- log.error("The request with Method["+method+"] was forbidden by server!");
- response.setContentType("text/html;charset=GBK");
- response.setCharacterEncoding("GBK");
- resp.setStatus(403);
- response.getWriter().print("<font size=6 color=red>对不起,您的请求非法,系统拒绝响应!</font>");
- return;
- }
<span style="white-space:pre"> </span> String method = req.getMethod(); if(!"GET".equals(method)&&!"POST".equals(method)&&!"HEAD".equals(method)) { log.error("The request with Method["+method+"] was forbidden by server!"); response.setContentType("text/html;charset=GBK"); response.setCharacterEncoding("GBK"); resp.setStatus(403); response.getWriter().print("<font size=6 color=red>对不起,您的请求非法,系统拒绝响应!</font>"); return; }在burpsuite上面验证,也成功的反应出了正确的消息头。
这里请记住
- resp.setStatus(403);
resp.setStatus(403);
否则是没法经过AppScan的扫描的url