Web开发安全 - 防御篇 | 青训营笔记

77 阅读1分钟

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

重点内容

  • XSS 的防御
  • 防御 CSRF 的正确姿势
  • 防御 DoS
  • 防御 Injection
  • 防御中间人

XSS 的防御

  • 永远不信任用户的提交内容
  • 不要将用户提交内容直接转换成DOM

image.png

现成工具

  • 前端
    • 主流框架默认防御 XSS
    • google-closure-library
  • 服务端(Node)
    • DOMPurify

耗子尾汁

  • 用户需求 不讲武德,必须动态生成DOM
  • string -> DOM

image.png

  • 上传 svg

image.png

  • Blob 动态生成 script

image.png

  • 自定义跳转链接

image.png

  • 自定义样式

image.png

Same-origin Policy

image.png

Content Security Policy(CSP)

image.png

  • 服务器的响应头部

image.png

  • 浏览器 meta

image.png

防御 CSRF 的正确姿势

image.png image.png

token

image.png

  1. 用户绑定:攻击者也可以是注册用户 === 可以获取自己的token
  2. 过期时间:前向保密

image.png

iframe 攻击

anti-pattern

GET !== GET + POST

image.png

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

image.png

image.png

image.png

image.png

SameSite vs CORS

image.png

SameSite demo

image.png

防御 DoS

Regex DoS

image.png

Logical DoS

image.png

DDoS

image.png

防御 Injection

  • 找到项目中查询SQL地方
  • 使用 prepared statement

image.png

Injection beyond SQL

image.png

防御中间人

image.png

HTTPS 的一些特性

image.png

  • 此处为 TLS 1.2

image.png

HTTPS - 完整性

image.png

数字签名

image.png

image.png

  • 证书 image.png
  • 证书demo

image.png

  • 当签名算法不够健壮时:

image.png

HTTP Strict - Transport-Security(HSTS)

将HTTP主动升级到HTTPS

image.png

Subresource Integrity(SRI)

image.png

  • demo 标签hash(原始内容hash) vs 实际内容hash

image.png

image.png