参考资料 https://juejin.im/post/5bad9140e51d450e935c6d64
https://juejin.im/post/5b97ba596fb9a05cda774ba4
练习
中文
CSP
XSS是什么
XSS(Cross Site Scripting)跨站脚本攻击,通过在目标网站注入恶性脚本,使之再浏览器上运行,危害数据安全。只要有输入数据的地方,就可能存在XSS漏洞。
那么插入脚本可以做哪些事情:
1)获取当前域下Cookie
2)发送http请求
3)操作DOM
等等
漏洞原因
主要原因还是未对用户的输入进行过滤(通过构建请求可以直接越过前端的验证),后端没有对数据过滤。导致原本的HTML结构被更改,插入了恶性代码。
分类
反射型
反射型 XSS 只是将用户输入的数据展现到浏览器上(从哪里来到哪里去),即需要一个发起人(用户)来触发黑客布下的一个陷阱(例如一个链接),才能攻击成功。
如图:
1)攻击者构造特殊的URL,其中添加了恶意代码。
2)受害者被攻击者欺骗打开了这个URL,发送了这个带有恶意代码的请求。
3)请求得到响应,网站服务端将恶意代码从 URL 中取出,未对请求参数进行处理,拼接在 HTML 中返回给浏览器。
4)受害者遭到攻击,发送出了Cookie。
补充:使用innerHtml或outerHTML插入脚本,只是当作普通的html执行,js解析器不会执行js脚本,标签不会被转义。
比如
举个🌰
1 |
|
页面中有个构造特殊的URL,点击url跳转新页面,后端将请求参数拼接在HTML里返回。
1 | const koa = require('koa'); |
下面是模板引擎
1 |
|
在chrome下,自动帮助用户防御
存储型
存储型 XSS 会把用户输入的数据保存在服务器端。
如图:
1)攻击者提交了带有恶意代码的数据。
2)后端未对数据处理直接存进数据库。
3)受害者请求数据,返回了带有恶意代码的html,执行了里面的恶意代码。
4)受害者遭到攻击,发送出了Cookie。
那么顺便了解一下插入脚本并且会执行脚本的方法(因为使用innerHTML和outerHTML插入,会被视为一个文本,不执行里面的脚本)
1)document.write
1 |
|
2)动态插入script标签(同步异步都可以)
1 |
|
3)动态创建script标签,src设置为外部的js文件路径,再插入body中
1 |
|
4)改变已有的script标签的src
1 |
|
5)以及服务端直接返回完整的html其中的脚本会执行
DOM型
1)攻击者构造出特殊的 URL,其中包含恶意代码。
2)用户打开带有恶意代码的 URL,发送请求。
3)用户浏览器接收到响应后解析执行,取出 URL 中的恶意代码并执行。
4)恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。
举个🌰
1 |
|
某个页面有个别人留下的恶意链接,访问这个页面会返回一个html页面。
1 | const koa = require('koa'); |
html页面解析的时候,做的事情是从window.location中取出参数并且放到body里,就导致了一次攻击
1 |
|
DOM型与反射型比较类似
区别:
DOM型:发送接口请求,获得响应,HTML解析执行页面的脚本的时候,从URL中取出了恶意的代码并且执行。
反射型: 发送接口请求,获得响应,恶意代码附加在了HTML中,HTML解析执行页面。