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

50 阅读2分钟

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

一、XSS的防御

1.原则

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

2.现成工具

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

3.动态生成DOM要小心

  • string->DOM
  • 上传svg
  • Blob动态生成script
  • 自定义跳转链接
  • 自定义样式

4.Content Security Policy(CSP)

  • 哪些源(域名)被认为是安全的
  • 来自安全源的脚本可以执行,否则直接抛错
  • 对eval+inline script说NO!
  • 服务器的响应头部

image.png

  • 浏览器meta

image.png

二、CSRF的防御

image.png

除了Origin+Referrer,其他判断【请求来自于合法来源】的方式

image.png

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

  • SameSite Cookie
    • 我的Cookie只能为我所用
    • 限制条件:Cookie domain的属性是否和当前页面域名匹配
    • 第一方Cookie(√),第三方Cookie(×)
      • 限制的是Cookie domain/页面域名

三、防御Injection

  • 找到项目中查询SQL的地方
  • 使用prepared statement
  • 最小权限原则
    • sudo || root
  • 建立允许名单+过渡
    • rm
  • 对URL类型参数进行协议、域名、ip等限制
    • 访问内网

四、防御DoS

  • Regex DoS image.png

  • Logical DoS

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

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

五、防御中间人

HTTPS的一些特性

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

六、课后总结

本章节从防御者的角度上学习了Web开发安全的相关知识,Web开发安全非常重要,安全无小事,但使用的依赖(npm package,甚至是NodeJS)可能成为最薄弱的一环,需要不断保持学习的心态,冷静分析应对应对Web安全漏洞。