Java Web使用过滤器防止Xss攻击,解决Xss漏洞
发布时间:2018-11-11 10:41,
浏览次数:286
, 标签:
Java
Web
Xss
web.xml添加过滤器
xssFilter
com.quickly.exception.common.filter.XssFilter
xssFilter*
过滤器代码
package com.quickly.exception.common.filter; import javax.servlet.*; import
javax.servlet.http.HttpServletRequest; import java.io.IOException; /** *
作用:Xss过滤器 * 作者:Tiddler * 时间:2018/11/11 10:21 * 类名: XssFilter **/ 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 { //使用包装器
XssFilterWrapper xssFilterWrapper=new XssFilterWrapper((HttpServletRequest)
servletRequest); filterChain.doFilter(xssFilterWrapper,servletResponse); }
@Override public void destroy() { } }
过滤器包装器代码
package com.quickly.exception.common.filter; import
org.springframework.web.util.HtmlUtils; import
javax.servlet.http.HttpServletRequest; import
javax.servlet.http.HttpServletRequestWrapper; /** * 作用:防Xss过滤器[包装器] *
作者:Tiddler * 时间:2018/11/11 10:20 * 类名: XssFilterWrapper **/ public class
XssFilterWrapper extends HttpServletRequestWrapper { public
XssFilterWrapper(HttpServletRequest request) { super(request); } /** *
对数组参数进行特殊字符过滤 */ @Override public String[] getParameterValues(String name) {
if("content".equals(name)){//不想过滤的参数,此处content参数是 富文本内容 return
super.getParameterValues(name); } String[] values =
super.getParameterValues(name); String[] newValues = new String[values.length];
for (int i = 0; i < values.length; i++) { newValues[i] =
HtmlUtils.htmlEscape(values[i]);//spring的HtmlUtils进行转义 } return newValues; } }
总结:
主要是使用Java
Web的过滤器,将所有的request请求参数修改(主要是把存在xss风险的标签转义,如:),在转义时我没有自己实现替换与转义,是直接使用的spring自带的HtmlUtils类的htmlEscape方法转义的,方便很多