===============
Web项目在通过绿盟软件扫描的时候,提示“检测到目标URL存在http host头攻击漏洞”。漏洞的本意是,HTTP请求带了HOST头,WEB取了该HOST头作进一步动作,例如拼接URL。如果这个HOST是黑客非法伪造的,比如evil.com,那么拼接之后的URL就可能是http://evil.com/key=?value=,从而导致己方网站信息的泄露。解决方法如下:
设置一个过滤器,使用白名单对每次访问网站的HOST进行过滤。即当访问时,获取访问的Host,并与白名单中的信息进行比对,如果在白名单中有匹配的Host,则正常访问,否则,拒绝访问。
package ...
public class ExampleFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest hreq = (HttpServletRequest) request;
HttpServletResponse hres = (HttpServletResponse) response;
//取请求Host
String hostinfo = hreq.getHeader("header").trim();
//读取白名单
String[] whiteHostList = getWhiteList();
//进行比对
for(String whiteHost : whiteHostList) {
if(whiteHost.equals(hostinfo)) {
//说明访问者在白名单中
chain.doFilter(request,response);
} else {
setMessage("非法Host访问,访问无效!");
return;
}
}
}
}