import java.util.regex.Pattern;

//具体过滤关键字符

public class XSSUtil {

private static Pattern[] patterns = new Pattern[]{

// Script fragments

Pattern.compile("", 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("", Pattern.CASE_INSENSITIVE),

Pattern.compile("

// 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(""));

// System.out.println(XSSUtil.stripXSS(""));

}

}

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() : "";

}

});

}

}

xss img onerror java_java后台防止XSS的脚本攻击相关推荐

  1. 如何尽量规避XSS(跨站点脚本)攻击

    2019独角兽企业重金招聘Python工程师标准>>> 跨站攻击,即Cross Site Script Execution(通常简写为XSS,因为CSS与层叠样式表同名,故改为XSS ...

  2. 【XSS技巧拓展】————4、浅谈跨站脚本攻击与防御

    跨站脚本简称xss(cross-site scripting),利用方式主要是借助网站本身设计不严谨,导致执行用户提交的恶意js脚本,对网站自身造成危害.xss漏洞是web渗透测试中最常见而又使用最灵 ...

  3. XSS(跨站脚本)漏洞详解之XSS跨站脚本攻击漏洞的解决

    XSS(跨站脚本)漏洞详解 XSS的原理和分类 跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆, ...

  4. 跨网站脚本攻击(XSS)的原理与防范对策

    摘要:随着计算机网络技术的迅速发展,网络安全问题已变得越来越受到人们的重视,网络攻击形式多种多样,很多蠕虫病毒.木马病毒等植入到某些网页中,给网络用户带来了很大的安全隐患.其中XSS跨网站脚本攻击,恶 ...

  5. vue 如何防止xss攻击 框架_LearningNotes-1/Vue/Vue中防止XSS脚本攻击 at master · axuu/LearningNotes-1 · GitHub...

    Vue中防止XSS脚本攻击 最近写了一个博客评论模块,因为引入了表情包,所以就将原来的v-text的形式,改成了v-html,也就是渲染html标签,但是这样不可不免的会带来问题,就是XSS跨站脚本攻 ...

  6. php xss速查表,2020跨站脚本[xss]速查表 xss cheat sheet

    此跨站脚本(XSS)备忘单包含许多向量,可以帮助您绕过WAF和过滤器.您可以通过事件,标签或浏览器选择向量,每个向量都包含概念证明. 该备忘单会在2020年进行定期更新. 最近更新:2020年6月4日 ...

  7. xss 跨站脚本漏洞 php,跨站脚本漏洞(XSS)基础讲解

    XSS漏洞 一.文章简介 XSS漏洞是Web应用程序中最常见的漏洞之一.如果您的站点没有预防XSS漏洞的固定方法,那么很可能就存在XSS漏洞. 这篇文章将带你通过代码层面去理解三个问题: 什么是XSS ...

  8. ASP.NET Core中的OWASP Top 10 十大风险-跨站点脚本攻击 (XSS)

    本博文翻译自: https://dotnetcoretutorials.com/2017/10/25/owasp-top-10-asp-net-core-cross-site-scripting-xs ...

  9. xss植入_前端安全之XSS攻击

    XSS(cross-site scripting跨域脚本攻击)攻击是最常见的Web攻击,其重点是"跨域"和"客户端执行".有人将XSS攻击分为三种,分别是: 1 ...

最新文章

  1. java mysql failover_MySQL MMM 双主在Failover时挂起
  2. 机械行业 偏计算机,院校篇丨机械类:985机械不如二本计算机?
  3. python类型-python语言中的数据类型有哪些
  4. 乱乱乱!那些惨不忍睹的机房布线
  5. 趣学python3(23)-队列
  6. 为什么是hbase而不是mongodb
  7. linux C bool变量
  8. java 8入门与实践_30个Java入门技巧和最佳实践
  9. Ios: 如何保護iOS束文件屬性列表,圖像,SQLite,媒體文件
  10. iPhone XR再降价:64GB到手最低仅需4149元
  11. poj3237 Tree
  12. 机器学习技法总结(六)Decision Tree Hypothesis
  13. c语言中L''作用,L/C问题: 请问L/C上的49:Confirmation Instruction 有什么作用啊[1]
  14. 【leetcode】617. Merge Two Binary Trees
  15. FFA 2021 专场解读 - 实时数据湖
  16. html设置谷歌火狐IE写法,原生js编写设为首页兼容ie、火狐和谷歌
  17. vue 自定义指令 directive
  18. Android储存 文件储存
  19. 手机输入法emoji、颜文字存储
  20. 输入一串字符,将其中的大写变成小写,若不为大写则原样输出

热门文章

  1. sql server 2005 COUNT_BIG (Transact-SQL)
  2. swft c 语言 数组,如何在swift中实现数组的深拷贝
  3. Java并发编程之堵塞队列介绍以及SkipList(跳表)
  4. 培训时常犯的学习误区与应对方法
  5. ORACLE使用WITH AS和HINT MATERIALIZE优化SQL解决FILTER效率低下
  6. 背景选择器selector替换按钮默认背景
  7. php 接口安全解决方案,php接口数据安全解决方案(一)
  8. 手机整屏显示数据php,完美解决手机网页大背景不能铺完整个屏幕的超级代码
  9. python项目如何上线_django项目部署上线(示例代码)
  10. [转载] 1022 D进制的A+B (20分)【java题解】【80ms】