記一次跨站腳本問題的解決過程


    下面某子公司的官網被網警(雇的安全公司)掃描了,報告了一個跨站腳本漏洞。

簡單來說就是訪問的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