记一次跨站脚本问题的解决过程

    下面某子公司的官网被网警(雇的安全公司)扫描了,报告了一个跨站脚本漏洞。

简单来说就是访问的url后面跟的参数里,构造一些个js脚本来达到某些目的,比如弹出什么的。

    了解到其网站web服务器用的apache2.2,故首先想到在apache上使用其mod_rewrite进行对危险字符(比如<、>、script等)的过滤。

在apache的httpd.conf配置文件里:

打开mod_rewrite功能的注释:

LoadModule rewrite_module modules/mod_rewrite.so

  AllowOverride All None改成AllowOverride All

追加如下配置:

############### url filter #######################
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} [\"\'\<] [OR]
RewriteCond %{QUERY_STRING} (\")+ [OR]
RewriteCond %{QUERY_STRING} (\')+ [OR]
RewriteCond %{QUERY_STRING} (\>)+ [NC]
RewriteRule ^.* [F,L]
</IfModule>

 

然而,事情并未结束,问题仍存在。

 

    进一步分析,其网站某些功能还要通过apache反向代理访问后面的一个tomcat,故还要之前的配置对这类请求不起作用,还要在tomcat上再过滤一下。

解决方法是在tomcat上的应用里配置一个filter,通过HttpServletRequestWrapper对url上request parameter进行替换:

public class XssFilter
  implements Filter
{
  public void init(FilterConfig filterConfig)
    throws ServletException
  {}
  
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException
  {
    chain.doFilter(new XssHttpRequestWrapper((HttpServletRequest)request), response);
  }
  

}

public class XssHttpRequestWrapper
  extends HttpServletRequestWrapper
{
。。。
}

 

程序打包部署到tomcat上,第一次,无效,分析,发现其web.xml上配置了其他filter,重新修改web.xml,把我们的filter放到filter的最前面。 问题解决。

 

posted on 2017-02-16 17:24  肥兔子爱豆畜子  阅读(1950)  评论(0编辑  收藏  举报

导航