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) 来给值,用@或?来表示参数。