什么是XSS?
XSS通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。
- 跨站脚本攻击(前端注入)
- 注入攻击的本质,是把用户输入的数据当做前端代码执行。
- 这里有两个关键条件:
第一个是用户能够控制输入;
第二个是原本程序要执行的代码,拼接了用户输入的数据。 SQL
注入拼接的是操作数据库的SQL
语句。XSS
拼接的是网页的HTML
代码,一般而言我们是可以拼接出合适的HTML
代码去执行恶意的JS
语句(总结:XSS
就是拼接恶意的HTML)
XSS能获得什么?
- 盗取
Cookie
并发送(用的最频繁的) ,document.cookie
—— 读取cookie
,AJAX【核心是默认异步执行机制,依靠JS
】发送数据 - 获取内网
ip
(攻击内网、扫描内网) - 获取浏览器保存的明文密码
- 截取网页屏幕
- 网页上的键盘记录
- 利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
- 利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
XSS业务场景
重灾区:评论区、留言区、个人信息、订单信息等
针对型:站内信、网页即时通讯、私信、意见反馈
存在风险:搜索框、当前目录、图片属性等
XSS类型
- 反射型
XSS
(你提交的恶意数据成功的实现了XSS
,但是仅仅是对你这次访问产生了影响,是非持久型攻击)。 - 存储型
XSS
(你提交的数据成功的实现了XSS
,存入了数据库或者写入日志,别人访问这个页面的时候就会自动触发)。 DOM
型XSS
Ruoyi框架XSS的配置:
就用一个封装好的注解:@Xss
下面这句啥就是匹配输入的是不是<script>...</script>
主要也就是用的正则表达式匹配字符串(正则表达式语法难得雅痞,建议百度):
private static final String HTML_PATTERN = "<(\\S*?)[^>]*>.*?|<.*? />";
# 防止XSS
xss:
# 过滤开关
enabled: true
# 排除过滤链接(多个用逗号分隔)
excludes: /system/notice
# 匹配过滤链接(多个用逗号分隔)
urlPatterns: /system/*,/monitor/*,/tool/*
Ruoyi框架防止重复提交过滤:
就用一个封装好的注解:@RepeatSubmit