这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天.
Web安全-攻击篇
1. Cross-Site Scripting(XSS)
XSS的主要特点:
- 通常难以从UI上感知(暗地执行脚本)
- 窃取用户信息(cookie/token)
- 绘制UI(例如弹窗),诱骗用户点击/填写表单
以下是没有进行过滤的代码
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
});
ctx.body =
<div>$icontent}</div>;
}
//提交时候
fetch( " /submit", {
body : JSON.stringify({
id: "1",
content: '<script>alert( "xss" );</script>'});
});
ctx.body =<div>
<script>alert( "xss" );</script></div>`;
Stored XSS
stored xss
- 恶意脚本被存在数据库中
- 访问页面→读数据—被攻击
- 危害最大,对全部用户可见
host/path/?param=<script>alert( '123')</script>
public async render( ctx) {
const { param } = ctx.query;
ctx.status = 200;
ctx.body = <div>${param}</div>';
}
DOM-based XSS
- 不需要服务器的参与
- 恶意攻击的发起+执行,全在浏览器完成
host/path/?param=<script>alert( '123' )</script>
const content = new URL ( location.href ).searchParams. get( "param“)
const div = document.createElement( "div" ),
//恶意脚本注入
div.innerHTML = content;document.body. append( div );
Mutaiton-based XSS
- 利用了浏览器渲染DOM的特性(独特优化)
- 不同浏览器,会有区别(按浏览器进行攻击)
<noscript><p title="</noscript><img src=x onerror=alert(1)>">
<div>
<noscript><p title="</noscript>
<img src="x" onerror="alert(1)">
""> "
</div>
Cross-site request forgery(CSRF)
- 在用户不知情的前提下
- 利用用户权限(cookie)
- 构造指定HTTP请求,窃取或修改用户敏感信息
SQL injection
- 读取请求字段,直接以字符串的形式拼接
- 读取+修改。流量转发到第三方,使得第三方扛不住新增流量,导致第三方服务挂断。
SSRF
- 请求用户指定的callback
- web server通常有内网访问权限
Distributed DoS(DDoS)
短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。
logical DoS
- 耗时的同步操作
- 数据库写入
- sQL join
- 文件备份
- 循环执行逻辑
中间人攻击
- 明文传输
- 信息篡改不可知
- 对方身份未验证