跨站脚本漏洞
【摘要】 跨站脚本漏洞同步滚动:开漏洞描述黑客在input或者url上输入非法字符,如<ScRiPt>confirm(4890)<cRiPt>,则在网页上弹出确认窗口,相关的脚本被非法执行了。修复方法给程序做一个拦截器,拦截请求,转换一些特殊符号,应用中一般不会有这些特殊符号,如果有这些特殊符号,则按规则还原。具体操作编写一个过滤器处理转义字符public class XssFilter implem...
跨站脚本漏洞
同步滚动:开
漏洞描述
黑客在input或者url上输入非法字符,如<ScRiPt>confirm(4890)<cRiPt>
,则在网页上弹出确认窗口,相关的脚本被非法执行了。
修复方法
给程序做一个拦截器,拦截请求,转换一些特殊符号,应用中一般不会有这些特殊符号,如果有这些特殊符号,则按规则还原。
具体操作
编写一个过滤器处理转义字符
public class XssFilter implements Filter { @Override
public void destroy() {
} @Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException { //chain.doFilter(request, response);//放行
chain.doFilter(new XssHttpServletRequestWrapperNew(
(HttpServletRequest) request), response);
} @Override
public void init(FilterConfig arg0) throws ServletException {
}
}
public class XssHttpServletRequestWraper extends HttpServletRequestWrapper { public XssHttpServletRequestWraper(HttpServletRequest request) { super(request);
} @Override
public String getParameter(String name) { return clearXss(super.getParameter(name));
} @Override
public String getHeader(String name) { return clearXss(super.getHeader(name));
} @Override
public String[] getParameterValues(String name) { // 处理路径中的转义字符
String[] values = super.getParameterValues(name);
String[] newValues = new String[values.length]; for (int i = 0; i < values.length; i++) {
newValues[i] = clearXss(values[i]);
} return newValues;
} // 清除路径中的转义字符
public String clearXss(String value) { if (value == null || "".equals(value)) { return value;
}
value = value.replaceAll("<", "<").replaceAll(">", ">");
value = value.replaceAll("\\(", "(").replace("\\)", ")");
value = value.replaceAll("'", "'");
value = value.replaceAll("eval\\((.*)\\)", "");
value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
value = value.replace("script", ""); return value;
}
}
在web.xml中注册该过滤器
<filter>
<filter-name>XssFilter</filter-name>
<filter-class>com.fangle.filter.XssFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>XssFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)