概念我就不说了 直接百度一份html
XSS是一种常常出如今web应用中的计算机安全漏洞,它容许恶意web用户将代码植入到提供给其它用户使用的页面中。好比这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞因为被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。前端
简单来讲 用户提交的数据中有js脚本 提交的数据再次显示到页面的时候会运行这个脚本。如web
<script> window.location.href="xxxxxxxxx"; </script>
可是把html中的特殊符号 如 "<" 用 $lt; 表示那么html就会认为这是一个普通显示的字符 。 安全
对输入的字符作转义,把特殊字符转义 如 用 "$lt;" 表示 “<” 具体实现以下 网络
继承 HttpServletRequestWrapper 重写其中的方法 在用到前端传来的参数的地方作转义app
public class XssHttpServletRequestWraper extends HttpServletRequestWrapper { public XssHttpServletRequestWraper(HttpServletRequest request) { super(request); } @Override public String getHeader(String name) { String str = StringEscapeUtils.escapeHtml(super.getHeader(name)); return str; } @Override public String getQueryString() { String str = StringEscapeUtils.escapeHtml(super.getQueryString()); return str; } @Override public String getParameter(String name) { String str = StringEscapeUtils.escapeHtml(super.getParameter(name)); return str; } @Override public String[] getParameterValues(String name) { String[] values = super.getParameterValues(name); if(values != null) { int length = values.length; String[] escapseValues = new String[length]; for(int i = 0; i < length; i++){ escapseValues[i] = StringEscapeUtils.escapeHtml(values[i]); } return escapseValues; } return super.getParameterValues(name); } }
注 :StringEscapeUtils.escapeHtml() 须要引入如下架包 具体使用请百度 ide
<dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency>
写过滤器 对全部请求进行过滤url
@WebFilter(urlPatterns = "/*") public class XssFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { filterChain.doFilter(new XssHttpServletRequestWraper((HttpServletRequest) servletRequest),servletResponse); } @Override public void destroy() { }
这样就能够了spa