Web开发安全之旅 | 青训营笔记

80 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第13天

Web开发安全之旅

安全问题危害:

  • 用户
  • 公司
  • 程序员(祭天

假如你是一个hacker--攻击

Cross-site-Scripting(xss)

特点

  • 通常难以从UI上感知(暗地执行脚本)
  • 窃取用户信息
  • 绘制用户信息(cookie/token)

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>`
}

Stored XSS

  • 恶意脚本被存在数据库中
  • 访问页面 -> 读数据 === 被攻击
  • 危害最大,对全部用户可见

Reflected XSS

不涉及数据库

从URL上攻击

public async render(ctx) {
	const {param} = ctx.query;
	ctx.status 200;
	ctx.body =`<div>${param}</div>;`
}	

DOM-based XSS

不需要服务器的参与

恶意攻击的发起+执行,全在浏览器完成

Mutation-based XSS

利用了浏览器渲染D0M的特性(独特优化)

不同浏览器,会有区别(按浏览器进行攻击)

Cross-site request forgery(CSRF)

在用户不知情的前提下

利用用户权限(cookie)

构造指定HTTP请求,窃取或修改用户敏感信息

Snipaste_2022-08-03_09-32-54.png

SQL Injection

Snipaste_2022-08-03_09-34-13.png

Injection不止于SQL

  • CLI
  • OS command
  • Server-Side Request Forgery(SSRF)服务端伪造请求
    • 严格而言,SSRF不是injection,但是原理类似

Denial of Service(DoS)

通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。

Logical DoS

耗时的同步操作

数据库写入

SQL join

文件备份

循环执行逻辑

Snipaste_2022-08-03_10-02-40.png

Distributed DoS(DDoS)

短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。

攻击特点:

直接访问IP

任意API

消耗大量带宽(耗尽)

Snipaste_2022-08-03_10-03-47.png

中间人攻击

Snipaste_2022-08-03_10-04-21.png

明文传输

信息篡改不可知

对方身份未验证

防御

永远不信任用户的提交内容

不要将用户提交内容直接转换成D0M

XSS

前端:

主流框架默认防御XSS

google-closure-library

服务端(Node): DOMPurify

  • string->DOM

  • 上传svg

  • Blob动态生成script

  • 自定义跳转链接

  • 自定义样式】

Content Security Policy(CSP)

哪些源(域名)被认为是安全的

来自安全源的脚本可以执行,否则直接抛错

对eval+inline script说NO

CSRF的防御

Snipaste_2022-08-03_10-09-25.png

CSRF--token

除了Origin+Referrer

其他判断【请求来自于合法来源】的方式:

现有页面后有请求

  • if(请求来自合法页面)
  • then(服务器接收过页面请求)
  • then(服务器可以标识)

Snipaste_2022-08-03_10-12-12.png

CSRF一一iframe攻击

Snipaste_2022-08-03_10-13-00.png

CSRF anti-pattern

Snipaste_2022-08-03_10-13-44.png

避免用户信息被携带: SameSite Cookie

Snipaste_2022-08-03_10-14-26.png

Snipaste_2022-08-03_10-14-43.png

SameSite vs CORS

Snipaste_2022-08-03_10-16-04.png

SameSite Cookie

Snipaste_2022-08-03_10-16-42.png