import java.util.regex.Pattern;

//具体过滤关键字符
public class XSSUtil {
private static Pattern[] patterns = new Pattern[]{
// Script fragments
Pattern.compile("<script>(.*?)</script>", Pattern.CASE_INSENSITIVE),
// src='...'
Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
// lonely script tags
Pattern.compile("</script>", Pattern.CASE_INSENSITIVE),
Pattern.compile("<script(.*?)>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
// eval(...)
Pattern.compile("eval\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
// expression(...)
Pattern.compile("expression\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
// javascript:...
Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE),
// vbscript:...
Pattern.compile("vbscript:", Pattern.CASE_INSENSITIVE),
// onload(...)=...
Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
//现场安全测试增加校验
Pattern.compile("alert(.*?)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
Pattern.compile("<", Pattern.MULTILINE | Pattern.DOTALL),
Pattern.compile(">", Pattern.MULTILINE | Pattern.DOTALL)
}; public static String stripXSS(String value){
if (value != null) {
// TODO ESAPI library
// NOTE: It's highly recommended to use the ESAPI library and uncomment the following line to
// avoid encoded attacks.
// value = ESAPI.encoder().canonicalize(value); // Avoid null characters
value = value.replaceAll("\0", ""); // Remove all sections that match a pattern
for (Pattern scriptPattern : patterns){
value = scriptPattern.matcher(value).replaceAll("");
}
}
return value;
} public static void main(String[] args) {
System.out.println("11"+ XSSUtil.stripXSS("<img src=0 onerror=alert(1)>"));
// System.out.println(XSSUtil.stripXSS("<img src=0 onerror=alert(1)>"));
} }
import com.ideatech.common.util.XSSUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder; import java.beans.PropertyEditorSupport; //每一个请求进入控制层之前会先进行字符过滤
@ControllerAdvice
@Component
@Slf4j
public class GlobalBindingInitializer { @InitBinder
protected void initBinder(WebDataBinder binder) {
// String类型转换,将所有传递进来的String进行HTML编码,防止XSS攻击
binder.registerCustomEditor(String.class, new PropertyEditorSupport() {
@Override
public void setAsText(String text) {
if(text != null){
String cleanText = XSSUtil.stripXSS(text);
if(!cleanText.equals(text)){
log.info("xss clean, before[{}], after[{}]",text,cleanText);
text = cleanText;
}
}
setValue(text);
}
@Override
public String getAsText() {
Object value = getValue();
return value != null ? value.toString() : "";
}
});
}
}

最新文章

  1. MVC 创建线程内的db单例
  2. Java多线程编程详解
  3. Android RecycleView + CardView 控件简析
  4. Java Core 学习笔记——3.char/Unicode/代码点/代码单元
  5. ie调试器
  6. 论文阅读:Siam-RPN
  7. jersey 用FastJson替换掉默认的Jackson
  8. SSM+MyBatis框架详解
  9. 深入理解Java类加载器(ClassLoader)
  10. FastReport.Net报表故障排除方法
  11. Find the Missing Number II
  12. SpringMVC系列(十二)自定义拦截器
  13. python 字体颜色的设置
  14. chrome 概述
  15. PHP 手机号中间4位加密
  16. key寻址算法
  17. HDU 2619 完全剩余类 原根
  18. JavaScript常用工具方法封装
  19. day36 爬虫+http请求+高性能
  20. Buildroot 外部编译器配置

热门文章

  1. Java基础IO类之File类
  2. vs2017环境下python包的安装
  3. zabbix的离线安装方法----孙祎晨,如需转载请注明出处,谢谢配合。
  4. Spring的事件监听ApplicationListener
  5. sublime text3 关闭更新提醒
  6. SQL链接服务器查询-OPENQUERY的使用
  7. .NET Core 使用swagger进行分组显示
  8. 【转载】C#中使用OrderBy和ThenBy等方法对List集合进行排序
  9. idea+maven使用
  10. vscode教程(基础篇)