web安全之XSS注入漏洞

XSS攻擊簡介

XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使用戶加載並執行攻擊者惡意製造的網頁程序。這些惡意網頁程序通常是JavaScript,但實際上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻擊成功後,攻擊者可能得到包括但不限於更高的權限(如執行一些操作)、私密網頁內容、會話和cookie等各種內容。

XSS攻擊原理

HTML是一種超文本標記語言,通過將一些字符特殊地對待來區別文本和標記,例如,小於符號(<)被看作是HTML標籤的開始,<title>與</title>之間的字符是頁面的標題等等。當動態頁面中插入的內容含有這些特殊字符(如<)時,用戶瀏覽器會將其誤認爲是插入了HTML標籤,當這些HTML標籤引入了一段JavaScript腳本時,這些腳本程序就將會在用戶瀏覽器中執行。所以,當這些特殊字符不能被動態頁面檢查或檢查出現失誤時,就將會產生XSS漏洞。

XSS攻擊案例

1、利用XSS彈警告窗: <script>alert(‘xss’)</script>

2、獲取cookie形式:<script>alert(document.cookie)</script>

3、嵌入其他網站: <iframe src=http://baidu.com width=0 height=0></iframe>

4、XSS輸入也可能是HTML代碼段,如使網頁不停刷新: <meta http-equiv="refresh" content="0;">

解決方法

通過過濾器實現

在項目web.xml 中加入 以下代碼:

 

編寫過濾器:

<filter>
        <filter-name>XssFilter</filter-name>
        <filter-class>cn.com.cis.acic.sales.common.web.XssFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>XssFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>XssFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>XssFilter</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

編寫過濾器:


import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;



 
public class XssFilter implements Filter {

FilterConfig filterConfig = null;
	
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		 this.filterConfig = null;
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		 chain.doFilter(new XssShellInterceptor( (HttpServletRequest) request), response);
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub

控制xss攻擊關鍵字


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;



 
public class XssShellInterceptor extends HttpServletRequestWrapper{

	public XssShellInterceptor(HttpServletRequest request) {
		super(request);
	}

	
	public String[] getParameterValues(String parameter) {
	      String[] values = super.getParameterValues(parameter);
	      if (values==null)  {
	                  return null;
	          }
	      int count = values.length;
	      String[] encodedValues = new String[count];
	      for (int i = 0; i < count; i++) {
	                 encodedValues[i] = cleanXSS(values[i]);
	       }
	      return encodedValues;
	    }
	    public String getParameter(String parameter) {
	          String value = super.getParameter(parameter);
	          if (value == null) {
	                 return null;
	                  }
	          return cleanXSS(value);
	    }
	    public String getHeader(String name) {
	        String value = super.getHeader(name);
	        if (value == null)
	            return null;
	        return cleanXSS(value);
	    }
	    
	    private String cleanXSS(String value) {
	    	  value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;");
	          value = value.replaceAll("'", "& #39;");
	          value = value.replaceAll("eval\\((.*)\\)", "");
	          value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']","\"\"");
	          value = value.replaceAll("script", "");
	          value = value.replaceAll("alert", "");
	        return value;
	    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章