XSS介绍
XSS: Cross site scripting,跨站脚本攻击
本来应该叫做CSS,但是css常常代表样式,所以就改用X
原理:用户的数据被当作脚本执行了
XSS主要是通过加入script脚本获取到用户的cookie,然后就可以登陆进行一些欺骗操作了
攻击手段:
- 把带有script标签的url发给用户,如果用户点击了,就会被攻击(如果链接可疑,则使用短链)
- 输入框输入攻击脚本
场景:
QQ空间进入到别人空间,然后发现自己就被盗号了
XSS攻击类型
两大类型
- 反射型:通过url参数直接注入,然后把url发送给受害者(如果直接给用户肯定看的出来,这个时候做成短链)
- 注入型:存储到DB后读取时注入,比如评论里
添加xss攻击
XSS攻击注入点:
- HTML节点内容,实例:
- from=
beijing<script>alert(1)</script>
- 评论区添加xss攻击
- from=
- HTML属性:img src=
image/1" onerror="alert(1)
,中间这样添加就可以攻击 - javascript代码:from=
beijing";alert(1);"
,默认都有开始和闭合的引号 - 富文本: 评论区添加富文本
XSS防御:
两种思路:
- 数据不要变成脚本可执行程序
- 变成了程序也不让他执行
具体方法:
- 浏览器自带的会防御注入到
HTML节点和属性
的XSS攻击,但是通过url注入到js代码的工具不会防御,如果后台关闭X-XSS-Protection,就可以让浏览器不防御 - 转译成
HTML实体
,相应字符实体表- HTML内容转译,只显示text内容,只需要
< => $gt; > => $lt;
- HTML属性转译,主要是 单引号、双引号、空格
- javascript代码转译:如果用的是属性转译js显示就有问题
"
=>\"
,'
=>\'
,\
=>\\
,情型:from=beijing";alert(1);//",//
代表注释- 终极解决方法: JSON.stringify(xxx),这样外面就默认是带有双引号了
注意点:js中带有,浏览器自动就会拦截报错
- 富文本
过滤
: 需要保留一些html标签,所以不能转译,而是过滤- 黑名单过滤(变种太多了,所以写的不一定完整,不推荐使用)
site.js查看具体内容
- 白名单进行过滤
- 黑名单过滤(变种太多了,所以写的不一定完整,不推荐使用)
- HTML内容转译,只显示text内容,只需要
框架的xss
三大框架React\Vue\Angular默认自带防御xss
防御点:能不用innerHTML就不要使用
0条评论