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


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

简单来说就是访问的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的最前面。 问题解决。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM