package com.dep.aop; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; /** * 拦截防止sql注入 * @author wb_zypt * */ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { HttpServletRequest orgRequest = null; public XssHttpServletRequestWrapper(HttpServletRequest request) { super(request); orgRequest = request; } /** * 覆盖getParameter方法,将参数名和参数值都做xss过滤。<br/> * 如果需要获得原始的值,则通过super.getParameterValues(name)来获取<br/> * getParameterNames,getParameterValues和getParameterMap也可能需要覆盖 */ @Override public String getParameter(String name) { String value = super.getParameter(xssEncode(name)); if (value != null) { value = xssEncode(value); } if(value == null){ value = (String)getParameterMap().get(name); } return value; } @Override @SuppressWarnings("unchecked") public Map getParameterMap() { Map newParams = new HashMap(); Map params = super.getParameterMap(); /*for(Object entry : params.entrySet()){ String key = (String)((Entry)entry).getKey();//前台对应的key值 Object dbName = ((Entry)entry).getValue();//数据库描述字段 newParams.put(key, dbName); if(dbName instanceof String){ newParams.put(key, xssEncode((String)dbName)); }else if(dbName.getClass() == String[].class){ newParams.put(key, xssEncode((String[])dbName)); } }*/ Set<String> keySet = params.keySet(); for (Iterator iterator = keySet.iterator(); iterator.hasNext();) { String key = (String) iterator.next(); String[] str = (String[]) params.get(key); newParams.put(key, xssEncode((String[])str)); } return newParams; } public String[] getParameterValues(String parameter) { String[] values = super.getParameterValues(parameter); if (values==null) { return null; } int count = values.length; String[] encodedValues = new String[count]; for (int i = 0; i < count; i++) { encodedValues[i] = xssEncode(values[i]); } return encodedValues; } /** * 覆盖getHeader方法,将参数名和参数值都做xss过滤。<br/> * 如果需要获得原始的值,则通过super.getHeaders(name)来获取<br/> * getHeaderNames 也可能需要覆盖 */ @Override public String getHeader(String name) { String value = super.getHeader(xssEncode(name)); if (value != null) { value = xssEncode(value); } return value; } private static String[] xssEncode(String[] s) { String[] newStr = new String[s.length]; for(int i=0;i<s.length;i++){ newStr[i]= xssEncode(s[i]); } return newStr; } /** * 将容易引起xss漏洞的半角字符直接替换成全角字符 * * @param s * @return */ private static String xssEncode(String s) { if (s == null || "".equals(s)) { return s; } StringBuilder sb = new StringBuilder(s.length() + 16); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); switch (c) { case '>': sb.append('>');//全角大于号 break; case '<': sb.append('<');//全角小于号 break; case '\'': sb.append('‘');//全角单引号 break; case '\"': sb.append('“');//全角双引号 break; case '&': sb.append('&');//全角 break; case '\\': sb.append('\');//全角斜线 break; case '#': sb.append('#');//全角井号 break; default: sb.append(c); break; } } return sb.toString(); } /** * 获取最原始的request * * @return */ public HttpServletRequest getOrgRequest() { return orgRequest; } /** * 获取最原始的request的静态方法 * * @return */ public static HttpServletRequest getOrgRequest(HttpServletRequest req) { if (req instanceof XssHttpServletRequestWrapper) { return ((XssHttpServletRequestWrapper) req).getOrgRequest(); } return req; } }
相关推荐
<filter-name>XssFilter</filter-name> <filter-class>com.xxx.Filter.XssFilter</filter-class> </filter> <filter-mapping> <filter-name>XssFilter</filter-name> <url-pattern>/* </filter-mapping>
原理过程 Springboot中会使用FilterRegistrationBean来注册Filter,Filter是Servlet规范里面的,属于容器范围,Springboot中没有web.xml,那Springboot中,不用管Filter是如何交给Ser...SpringBoot整合XssFilter,...
直接可以运行,包含测试类,对HTML和SQL进行过滤,方便扩展。并且可以配置不拦截的路径,包含注释,方便学习。 博客地址:https://blog.csdn.net/u011974797/article/details/121792680
XSSFilter源码处理漏洞
第十节 xss filter过滤器-01
所有需要的文件均在里面,超有所值
防止SQL注入和XSS攻击Filter
另外,可以通过Extension_XSSFilter::detectXSS($string)直接在您的扩展中使用XSS过滤器,该扩展Extension_XSSFilter::detectXSS($string)接受一个字符串,如果检测到XSS,则返回布尔值。 前端实用程序 从XSS Filter...
黑帽大会上一个讲述如何绕过IE9 XSS防御的论文
前端开源库-xss-filtersXSS过滤器,安全的XSS过滤器-足够的输出过滤来防止XSS!
第8章 防御XSS攻击,介绍了一些防范XSS攻击的方法,例如,运用XSS Filter进行输入过滤和输出编码,使用Firefox浏览器的Noscript插件抵御XSS攻击,使用HTTP-only的Cookies同样能起到保护敏感数据的作用。
webapps\XssFilter3\WEB-INF\conf\antisamy-config.xml 保存后,重启Tomcat即可生效。 默认WebService地址是 http://[youserver]:[yourport]/XssFilter3/services/AntiSamyFilter .net环境下得到wsdl的地址是 ...
xss-filter-spring-boot-starter springboot自动xss 使用方法在项目的pom.xml中加入依赖即口 <groupId>com.djk</groupId> <artifactId>xss-filter-spring-boot-starter <version>0.0.1 目前支持3种入参数xss...
java过滤器,XSS : 跨站脚本攻击(Cross Site Scripting),SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
SpringBoot整合XssFilter,Jsoup等实现请求参数的过滤,处理Xss攻击及sql注入
Lucy-XSS:XssFilter,XssPreventer Lucy-XSS是一个包含两个防御模块的开源库,用于保护Web应用程序免受XSS攻击。 它支持基于白名单规则的安全策略。 当前的默认规则是Naver的标准。 您可以根据需要更改默认规则。...
The most notorious was created by RSnake and is called "XSS Filter Evasion Cheat Sheet“ and was later donated to OWASP. Another interesting project is HTML5 Security Cheatsheet by Cure53.
Laravel开发-laravel-xss-filter 过滤XSS的用户输入,但不要过滤其他HTML
showdown-xss-filter 扩展,使用过滤XSS。... Converter ( { extensions : [ 'xssfilter' ] } )var text = "[removed]alert('xss!')[removed]" ;console . log ( converter . makeHtml ( text ) )