最近项目验收,然后客户安排了绿盟的人来做渗透测试,其中有个漏洞就是:
启用了不安全的HTTP方法
具体问题就是:
可以用option去访问网页,得到可以访问的方法,常见的有get,post,然后,还有delete,option,head等方法。
这里面的问题就是,get和post是常用的,而delete可以删服务器的文件,option可以查看服务的情况,这些命令的启用,对服务器有风险。
常规修复方法就是,把那些用不到的方法都禁了,只留下get和post。
然后,因为我们的服务器比较老旧,是tongweb4,常规的修复方法是,配置修复,这个方法在tongweb4上面不支持,因为版本太久了。
此处列出常规方案:
修改web.xml
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
<http-method>DELETE</http-method>
<http-method>HEAD</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
常规来说,把这个配置加到web.xml中,重启,就可以解决问题了,用不到的delete和option等方法就禁止了。
上面的方案在网上很常见,而我写这个,当然是因为,这个方案在tongweb4上面,没用。
最后怎么解决的呢?
用过滤器。
就是servlet的过滤器,过滤掉其他的方法。
过滤器代码如下:
/**
* 修复安全漏洞:启用了不安全的方法 2021年3月3日
*/
public class MethodFilter implements Filter {
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
// pass the request along the filter chain
String httpmethod = ((HttpServletRequest) request).getMethod()
.toUpperCase();
if ("GET".equals(httpmethod) || "POST".equals(httpmethod)) {
chain.doFilter(request, response);
} else {
((HttpServletResponse) response).sendError(403);
}
}
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
public void destroy() {
// TODO Auto-generated method stub
}
}
然后,还要在web.xml中,配上这个过滤器:
<!-- 修复安全漏洞:启用了不安全的方法 -->
<filter>
<filter-name>MethodFilter</filter-name>
<filter-class>com.web.MethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
至此,万事大吉。
重现用option方法去访问网站,就会报错403。
在这里记录这个处理方案,如果也有朋友遇到配置无效的场景,那么,能看到这个方案,帮到一个人,就非常好了。
免责声明:本站所有内容及图片均采集来源于网络,并无商业使用,如若侵权请联系删除。