这是我参与「第四届青训营 」笔记创作活动的的第9天
两个角度看web安全
假如你是一个hacker——攻击者 假如你是一个开发者——防御
攻击篇
Cross-Site Scripting XSS
XSS的一些特点
- 通常很难从UI上感知(暗地执行脚本)
- 窃取用户信息(cookie/token)
- 绘制UI(例如弹窗),诱骗用户点击/填写表单
xss demo
public async submit(ctx) {
const { content,id } = ctx.request.body
//没有对content过滤
await db.save({
content,
id
})
}
public async render(ctx){
const { content } = await db.query({
id:ctx.query.id
})
//没有对content过滤
ctx.body = `<div>${content}</div>`
}
可以提交恶意版本
//提交的时候
fetch("/submit",{
body:JSON.stringfy({
id:"1",
content:`<script>alert("XSS");</script>`
})
})
//读取
ctx.body = `
<div>
<script>alert("XSS");</script>
</div>
`
存储型XSS (Stored XSS)
刚才演示的demo就属于存储型XSS攻击方式,就是把恶意代码存储在数据库中
存储型XSS有以下几个特点
- 恶意脚本被存在数据库中
- 访问页面-> 读取数据 == 被攻击
- 危害最大,对全部用户可见
反射型XSS(Reflected XSS)
反射型的XSS就不会设计数据库,是直接从url上进行攻击
基于DOM的XSS攻击方式(DOM-based XSS)
基于mutation的XSS攻击(mutation-based XSS)
跨站伪造请求(Cross-site request forgery CSRF)
构造get请求(CSRF-GET)
构造post请求(CSRF-beyond GET)
注入攻击(Injection)
Distributed DDoS
短时间内,来自大量的将是设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应
攻击特点:
直接访问IP.
任意API
消耗大量带宽(耗尽)