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) 來給值,用@或?來表示參數。