这是我参与「第四届青训营 」笔记创作活动的的第2天
一、XSS攻击的含义
XSS是跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的
举个例子,在留言板中,如果用户不按正常套路出牌,在留言板输入
<script>alert("xss");</script>
此时,界面就变成了
<ul>
<li><script>alert("xss");</script></li>
</ul>
当浏览器解析到这一行时,就会跳出弹窗,从而达到了目的(但真正的xss一般不是跳出弹窗,而是携带恶意代码)
二、为什么会触发XSS攻击
1.盲目相信用户的提交内容 string——dom
- document.referer
- window.name
- location
- innerHTML
- documen.write
2.上传svg
<svg>
<script>alert('xss');</script>
</svg>
3.blob动态生成script
const blob = new Blob(
[script],
{ type: "text"/javascript }
);
const url = new URL.createObjectURL(blob);
const script = document.createElement("script");
script.src = url
4.自定义跳转链接
<a href="javascript:alert('xss')"><a>
5.自定义样式
三、XSS攻击的危害
针对用户
- 窃取用户信息(cookie/token),劫持会话
- 网络钓鱼
- 放马挖矿
- 广告刷流量
针对web服务
- 劫持后台
- 篡改页面
- 传播蠕虫
- 内网扫描
四、xss攻击的分类
- 存储型XSS(Stored XSS)
- 反射型XSS(Refelcted XSS)
- DOM型XSS(DOM-based XSS Demo)
(1)存储型XSS
1.特点
恶意脚本被存在在数据库中
访问页面——读数据 === 被攻击
危害最大,对全部用户可见
2.demo
<form action="action2.php" method="post">
ID: <input type="text" name="id" /> <br/>
Name:<input type="text" name="name" /> <br/>
<input type="submit" value="提交">
</form>
如图,我们往数据库提交1和
可见,我们的xss语句已经插入到数据库中了,当其他用户访问该页面时,插入的xss代码就执行了
(2)反射型XSS(Refelcted XSS)
1.特点
- 不涉及数据库攻击
- 从URL上攻击
2.demo
public async render(ctx){
const { param } = ctx.qurey
ctx.status = 200;
ctx.body = `<div>${param}</div>`
}
当我们通过输入框提交数据:,就会让url变成,从而使插入的xss代码执行
(3)DOM型XSS
1.特点
- 不需要服务器的参与
- 恶意攻击的发起 + 执行,全在浏览器完成
const content = new URL()
2.demo
<body>
<textarea name="" id=""></textarea>
<button>发布</button>
<ul>
</ul>
<script>
btn.onclick = function() {
var li = document.createElement('li');
li.innerHTML = text.value;
ul.insertBefore(li,ul.children[0])
}
</script>
</body>
当我们在输入框输入
用户点击该连接时,就可以达到窃取用户信息cookie的目的
五、XSS的防御
xss防御的思路为: 永远不信任用户的提交内容,不要将用户提交内容直接转换成 DOM,即对用户的输入(和URL参数)进行过滤,对输出进行html编码。
xss防御的现成工具:
六.结语
网络攻击的方式有很多,xss不过是其中最基本的一种罢了
如果文章对你有帮助的话,欢迎点个赞( ̄﹃ ̄),如果有不对的,欢迎评论区指出