Web开发的安全之旅(二)| 青训营笔记

56 阅读2分钟

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

防御篇

XSS

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

image.png

现成工具

前端

  • 主流框架默认防御XSS
  • google-closure-library

服务器(Node)

  • DOMPurify 当用户需求动态生成DOM时: !注意!: !! string->DOM

!! 上传svg

!! Blob 动态生成 script

!! 自定义跳转链接

!! 自定义样式

Content Security Policy(CSP)

  • 那些源(域名)被认为是安全的
  • 来自安全源的脚本可以执行,否则直接抛错
  • 对eval + inline script 直接抛错

CSRF的防御

image.png

CSRF--token

image.png

CSRF--iframe 攻击

image.png

CSRF anti-pattern

GET !== GET + POST

SameSite Cookie

避免用户信息被携带

image.png

限制的是:

image.png ① Cookie domain

② 页面域名

依赖Cookie的第三方怎么办?


Set-Cookie: SameSite=None; Secure;

SameSite VS CORS

SameSite:

  • Cookie发送

  • domain vs页面域名

  • “我跟你说个事儿,出这屋我可就不认了"

CORS:

  • 资源读写(HTTP请求)
  • 资源域名vs页面域名
  • 白名单

防御CSRF的正确姿势

image.png

Injection 防御

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

Injection beyond SQL

  • 最小权限原则
    • sudo|| root
  • 建立允许名单+过滤
    • rm
  • 对URL类型参数进行协议、域名、ip等限制
    • 访问内网

DoS防御

针对Regex DoS

  • Code Review (❌ /(ab*)+/)

  • 代码扫描+正则性能测试

  • ❌用户提供的使用正则

针对Logical DoS

  • 不是非黑即白
    • 有些case,只有在请求量大到一定之后,才会体现
  • 分析代码中的性能瓶颈
    • 同步调用
    • 串行逻辑 -->缓存?
    • CPU密集型操作
  • 限流

针对DDoS

  • 流量治理
    • 负载均衡
    • API网关
    • CDN
  • 快速自动扩容
  • 非核心服务降级

传输层--防御中间人

image.png

HTTPS的一些特性

  • 可靠性:加密
  • 完整性:MAC验证
  • 不可依赖性:数字签名