防止xss攻擊與sql注入

XSSjavascript

xss表示Cross Site Scripting(跨站腳本攻擊),它與SQL注入攻擊相似,SQL注入攻擊中以SQL語句做爲用戶輸入,從而達到查詢/修改/刪除數據的目的,而在xss攻擊中,經過插入惡意腳本,實現對用戶遊覽器的控制。Xss腳本攻擊類型分爲:非持久型xss攻擊、持久型xss攻擊。html

1.非持久型xss攻擊是一次性的,僅對當次的頁面訪問產生影響。非持久型xss攻擊要求用戶訪問一個被攻擊者篡改後的連接,用戶訪問該連接時,被植入的攻擊腳本被用戶遊覽器執行,從而達到攻擊目的。java

2.持久型xss攻擊會把攻擊者的數據存儲在服務器端,攻擊行爲將伴隨着攻擊數據一直存在。sql

 

防止Xss攻擊:過濾表單提交的數據,將可疑的內容去掉。數據庫

1.繼承HttpServletRequestWrapper類,使用裝飾模式重寫HttpServletRequest的獲取參數方法apache

package com.soufun.wap.servlet;

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

import org.apache.commons.lang.StringEscapeUtils;

public class XSSRequestWrapper extends HttpServletRequestWrapper {
	public XSSRequestWrapper(HttpServletRequest servletRequest) {
		super(servletRequest);
	}

	@Override
	public String[] getParameterValues(String parameter) {
		String[] values = super.getParameterValues(parameter);
		if ("pageChildren".equals(parameter)) {
			return values;
		}
		if (values == null) {
			return null;
		}
		int count = values.length;
		String[] encodedValues = new String[count];
		for (int i = 0; i < count; i++) {
			encodedValues[i] = stripXSS(values[i]);
		}
		return encodedValues;
	}

	@Override
	public String getParameter(String parameter) {
		String value = super.getParameter(parameter);
		return stripXSS(value);
	}

	private String stripXSS(String value) {
		if (null != value) {
			value = value.replaceAll("<", "<").replaceAll(">", ">");
			value = value.replaceAll("\\(", "(").replaceAll("\\)", ")");
			value = value.replaceAll("'", "'");
			value = value.replaceAll("eval\\((.*)\\)", "");
			value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
			value = value.replaceAll("script", "");
			value = StringEscapeUtils.escapeSql(value);
		}
		return value;
	}
}

 

2.建立攔截器服務器

package com.soufun.wap.filter;

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;

import com.soufun.wap.servlet.XSSRequestWrapper;

public class SqlXssFilter implements Filter {

	public void init(FilterConfig config) throws ServletException {
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		chain.doFilter(new XSSRequestWrapper(req), response);
	}

	public void destroy() {
	}
}

  

3.配置攔截器app

	<filter>
		<filter-name>sqlXssFilter</filter-name>
		<filter-class>com.soufun.wap.filter.SqlXssFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>sqlXssFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

 

SQL注入xss

所謂SQL注入,就是經過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。ide

防止sql注入的方法主要有:

1.使用存儲過程

2.校驗輸入的字符串

3.參數化sql

在設計與數據庫連接並訪問數據時,在須要填入數值或數據的地方,使用參數 (Parameter) 來給值,用@或?來表示參數。

相關文章
相關標籤/搜索