1、xss

什么是XSS攻击?
**XSS 即(Cross Site Scripting)中文名称为:跨站脚本攻击。**XSS的重点不在于跨站点,而在于脚本的执行。那么XSS的原理是:

恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。

那么XSS攻击最主要有如下分类:反射型、存储型、及 DOM-based型。 反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击。

1.2、SQL 注入
SQL注入是通过客户端的输入把SQL命令注入到一个应用的数据库中,从而执行恶意的SQL语句。

什么意思呢?我们来打个比方:我们有一个登录框,需要输入用户名和密码对吧,然后我们的密码输入 'or ‘123’ = '123 这样的。我们在查询用户名和密码是否正确的时候,本来执行的sql语句是:select * from user where username = ‘’ and password = ‘’. 这样的sql语句,现在我们输入密码是如上这样的,然后我们会通过参数进行拼接,拼接后的sql语句就是:

select * from user where username = ‘’ and password = ’ ’ or ‘123’ = '123 '; 这样的了,那么会有一个or语句,只要这两个有一个是正确的话,就条件成立,因此 123 = 123 是成立的。因此验证就会被跳过。这只是一个简单的列子,比如还有密码比如是这样的:’; drop table user;, 这样的话,那么sql命令就变成了:

select * from user where username = ‘’ and password = ‘’; drop table user;’ , 那么这个时候我们会把user表直接删除了。

sql被攻击的原因是:sql语句伪造参数,然后对参数进行拼接后形成xss攻击的sql语句。最后会导致数据库被攻击了。

防范的方法:

1、我们可以使用预编译语句(PreparedStatement,这样的话即使我们使用sql语句伪造成参数,到了服务端的时候,这个伪造sql语句的参数也只是简单的字符,并不能起到攻击的作用。

2、数据库中密码不应明文存储的,可以对密码使用md5进行加密,为了加大破解成本,所以可以采用加盐的方式。

2、springboot项目中的xss

2.1

在application.properties中加入


# 过滤开关
xss.enabled=true
# 排除链接(多个用逗号分隔)
xss.excludes=/content/*
# 匹配链接
xss.urlPatterns=/*,/monitor/*,/tool/*
#none simpleText basic basicWithImages relaxed
xss.jsoup.level=none

2.2

添加类FilterConfig.java

@Configuration
public class FilterConfig
{@Value("${xss.enabled}")private String enabled;@Value("${xss.excludes}")private String excludes;@Value("${xss.urlPatterns}")private String urlPatterns;@Value("${xss.jsoup.level}")private String level;@SuppressWarnings({ "rawtypes", "unchecked" })@Beanpublic FilterRegistrationBean xssFilterRegistration(){FilterRegistrationBean registration = new FilterRegistrationBean();registration.setDispatcherTypes(DispatcherType.REQUEST);registration.setFilter(new XssFilter());registration.addUrlPatterns(StringUtils.split(urlPatterns, ","));registration.setName("xssFilter");registration.setOrder(Integer.MAX_VALUE);Map<String, String> initParameters = Maps.newHashMap();initParameters.put("excludes", excludes);initParameters.put("enabled", enabled);initParameters.put("level", level);registration.setInitParameters(initParameters);return registration;}
}

2.3

添加类文件XssHttpServletRequestWrapper.java

public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper
{/*** @param request*/public XssHttpServletRequestWrapper(HttpServletRequest request){super(request);}public  String level="none";@Overridepublic String[] getParameterValues(String name){String[] values = super.getParameterValues(name);if (values != null){int length = values.length;String[] escapseValues = new String[length];for (int i = 0; i < length; i++){// 防xss攻击和过滤前后空格
//                Jsoup.clean(strHTML, Whitelist.none().addTags("div"));
//                1): none()
//                该API会清除所有HTML标签,仅保留文本节点。
//
//                2): simpleText()
//                该API仅会保留b, em, i, strong, u 标签,除此之外的所有HTML标签都会被清除。
//
//                3): basic()
//                该API会保留 a, b, blockquote, br, cite, code, dd, dl, dt, em, i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul 和其适当的属性标签,除此之外的所有HTML标签都会被清除,且该API不允许出现图片(img tag)。另外该API中允许出现的超链接中可以允许其指定http, https, ftp, mailto 且在超链接中强制追加rel=nofollow属性。
//
//                4): basicWithImages()
//                该API在保留basic()中允许出现的标签的同时也允许出现图片(img tag)和img的相关适当属性,且其src允许其指定 http 或 https。
//
//                5): relaxed()
//                该API仅会保留 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 标签,除此之外的所有HTML标签都会被清除,且在超链接中不会强制追加rel=nofollow属性。if(level.equals("none")){escapseValues[i] = Jsoup.clean(values[i], Whitelist.none()).trim();}else if(level.equals("simpleText")){escapseValues[i] = Jsoup.clean(values[i], Whitelist.simpleText()).trim();}else if(level.equals("basic")){escapseValues[i] = Jsoup.clean(values[i], Whitelist.basic()).trim();}else if(level.equals("basicWithImages")){escapseValues[i] = Jsoup.clean(values[i], Whitelist.basicWithImages()).trim();}else{ //relaxedescapseValues[i] = Jsoup.clean(values[i], Whitelist.relaxed()).trim();}}return escapseValues;}return super.getParameterValues(name);}
}

2.4

添加类文件 XssFilter.java

public class XssFilter implements Filter
{/*** 排除链接*/public List<String> excludes = new ArrayList<>();/*** xss过滤开关*/public boolean enabled = false;public String level="none";@Overridepublic void init(FilterConfig filterConfig) throws ServletException{String tempExcludes = filterConfig.getInitParameter("excludes");String tempEnabled = filterConfig.getInitParameter("enabled");String tempLevel = filterConfig.getInitParameter("level");if (StringUtils.isNotEmpty(tempExcludes)){String[] url = tempExcludes.split(",");for (int i = 0; url != null && i < url.length; i++){excludes.add(url[i]);}}if (StringUtils.isNotEmpty(tempEnabled)){enabled = Boolean.valueOf(tempEnabled);}if (StringUtils.isNotEmpty(tempLevel)){level = tempLevel;}}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException{HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse resp = (HttpServletResponse) response;if (handleExcludeURL(req, resp)){chain.doFilter(request, response);return;}XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest) request);xssRequest.level=level;chain.doFilter(xssRequest, response);}private boolean handleExcludeURL(HttpServletRequest request, HttpServletResponse response){if (!enabled){return true;}if (excludes == null || excludes.isEmpty()){return false;}String url = request.getServletPath();for (String pattern : excludes){Pattern p = Pattern.compile("^" + pattern);Matcher m = p.matcher(url);if (m.find()){return true;}}return false;}@Overridepublic void destroy(){}
}

3、测试

输入框中输入的文字为

 <table onclick="alert('dddd')">test</table>

保存到数据库中为
test

springboot xss相关推荐

  1. XSS(跨站脚本攻击)相关内容总结整理

    XSS的攻击相关资料整理 文章目录 XSS的攻击相关资料整理 跨站脚本攻击(XSS) XSS 简介 XSS 危害 XSS 原理 XSS 分类 XSS 防御总结 XSS 问答 参考资料 跨站脚本攻击(X ...

  2. 6、springboot-防止xxs攻击

    疫情大数据平台是一个公益的项目,但很可能被网络上大量的扫描器扫描,并有可能收到脚本的攻击,而进行防御就是很重要的,可以有效的避免我们被攻击. 本篇主要讲述防止xss攻击部分 定义: ​ XSS攻击通常 ...

  3. springboot防止XSS攻击和sql注入

    文章目录 1. XSS跨站脚本攻击 ①:XSS漏洞介绍 ②:XSS漏洞分类 ③:防护建议 2. SQL注入攻击 ①:SQL注入漏洞介绍 ②:防护建议 3. SpringBoot中如何防止XSS攻击和s ...

  4. Springboot过滤xss

    Springboot过滤xss 两种xss类型:存储型xss.反射型xss. 简介: 存储型:持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代 ...

  5. Springboot 对应XSS漏洞类配置处理

    前言:SpringBoot防Xss攻击,这几天自己学习了一下SpringBoot项目怎么预防Xss攻击,这里记录一下怎么防止Xss攻击的代码,等以后有需要用到的话,自己可以快速找到 1. 什么是 XS ...

  6. XSS是什么?如何防御?手摸手教你Springboot配置XSS防御,深入代码解析!

    XSS防御 一.简单了解一下XSS 二.如何防御 SpringBoot配置XSS防御 代码解析 一.简单了解一下XSS 来,百度先抄一段. HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别 ...

  7. springboot增加XSS跨站脚本攻击防护功能

    参考 文章https://my.oschina.net/u/4407261/blog/3395458 XSS原理 xss攻击的原理是利用前后端校验不严格,用户将攻击代码植入到数据中提交到了后台,当这些 ...

  8. java 过滤脚本_【快学SpringBoot】过滤XSS脚本攻击(包括json格式)

    XSS攻击是什么 XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安 ...

  9. xss攻击-跨站脚本漏洞修复 Springboot项目

    跨站脚本漏洞 XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序.这些恶意网页程序通常是JavaScript,但实际上也可 ...

最新文章

  1. Redis 笔记(04)— list类型(作为消息队列使用、在列表头部添加元素、尾部删除元素、查看列表长度、遍历指定列表区间元素、获取指定区间列表元素、阻塞式获取列表元素)
  2. android标题栏(titlebar)显示进度条
  3. 阿里某员工:发完年终奖后就离职,工作让我心力交瘁
  4. java字符串 直接能网络传输吗_atitit.二进制数据无损转字符串网络传输
  5. .net 程序加密方法
  6. 美国国防部选择VMware View用于全球作战系统
  7. sql注入问题-视图-事物-以及存储过程(可视化工具)
  8. paramiko 使用总结(SSH 操作远端机器)
  9. 元胞自动机模型_【ABM仿真模拟】第三章 元胞自动机 B
  10. Java 操作 HDFS
  11. 论文浅尝 | 知识图谱的单样本关系学习
  12. KMP算法的简单理解
  13. 关闭mysql方法_启动和关闭MySQL的方法
  14. EMNLP自然语言处理经验方法
  15. 职称计算机 将计算机broad_1下的e盘映射为k盘网络驱动器,职称计算机考试(网络基础)试题与答案操作.doc...
  16. 进程的守护神 - daemontools(进程监控)
  17. 冰点还原精灵图标不见了怎么办?
  18. 软件测试工程师必备知识点
  19. 私域流量运营平台有哪些?
  20. java的移位操作详解,左移和右移

热门文章

  1. 把ipad变成电脑的扩展屏的简单方法
  2. 混沌的市场里,怎么一眼识别出「好房子」
  3. Win10系统怎么自定义系统还原点?
  4. Python每日一记60这一仗,华为必须赢,一定能赢!
  5. 隐藏文件无法取消隐藏属性的解决[转]
  6. JSON[JavaScript Object Notation]封装
  7. 谈高水平竞技跆拳道训练 --赵磊
  8. 图像处理基本操作实现工业产品缺陷检测
  9. PHP的ob_start()
  10. 中间件DDS之DCPS模型