1、实现流程
- 将请求的入参取出
- 准备好过滤的工具类,将参数进行过滤
- 将过滤的参数继续传递
2、引入jar包
<!-- jsoup --> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.13.1</version> </dependency>
3、编写wrapper文件(wrapper文件的作用就是将格式化后的参数重新写回到request中)
public class XssAndSqlHttpServletRequestWrapper extends HttpServletRequestWrapper { //声明sql注入的非法字符 private static String illegalKey = "insert|select|delete|update|count|drop|substr|trim|cast|exec"; private static Set<String> illegalKeySet = new HashSet<String>(0); public XssAndSqlHttpServletRequestWrapper(HttpServletRequest request) { super(request); String keyStr[] = illegalKey.split("\\|"); //将非法字符添加到Set集合中 for (String str : keyStr) { illegalKeySet.add(str); } } // 重写getParameterValues @Override public String[] getParameterValues(String name) { String[] parameterValues = (name); if (parameterValues == null) { return null; } for (int i = 0; i < ; i++) { String value = parameterValues[i]; Whitelist whitelist = new Whitelist(); //允许的标签 w("a", "b", "blockquote", "br", "caption", "cite", "code", "col", "colgroup", "dd", "div", "dl", "dt", "em", "h1", "h2", "h3", "h4", "h5", "h6", "i", "img", "li", "ol", "p", "pre", "q", "small", "span", "strike", "strong", "sub", "sup", "table", "tbody", "td", "tfoot", "th", "thead", "tr", "u", "ul") //标签加属性,加上属性后,该标签的属性不会过滤 .addAttributes("a", "href", "title") .addAttributes("blockquote", "cite") .addAttributes("col", "span", "width") .addAttributes("colgroup", "span", "width") .addAttributes("img", "align", "alt", "height", "src", "title", "width") .addAttributes("ol", "start", "type").addAttributes("q", "cite") .addAttributes("table", "summary", "width") .addAttributes("td", "abbr", "axis", "colspan", "rowspan", "width") .addAttributes("th", "abbr", "axis", "colspan", "rowspan", "scope", "width") .addAttributes("ul", "type") ; parameterValues[i] = J(value, whitelist);; parameterValues[i] = checkIllegalKey(parameterValues[i].toLowerCase()); } return parameterValues; } //清除违法字符 private String checkIllegalKey(String value) { String paramValue = value; for (String keyword : illegalKeySet) { if () > keyword.length() + 4 && (" "+keyword(keyword+" "(" "+keyword+" "))) { //对于非法字符集的处理,置为空字符串,或者抛出异常 paramValue = S(paramValue, keyword, ""); } } return paramValue; } }