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

173 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第7天,记录一下昨天上课关于Web开发中安全问题的相关内容。

一、本节课重点内容

  • 攻击篇:XSS、CSRF、注入、DoS等攻击方式
  • 防御篇:针对各类攻击方式实行相应的防御策略

二、详细知识点介绍

1. 攻击篇

  • 跨站脚本攻击(Cross-Site Scripting,XSS
    • 原因:盲目信任用户提交的内容,如直接将用户提交的字符串转换成 DOM
    • 特点:
      • 难以从 UI 上感知
      • 窃取用户信息(cookie/token)
      • 绘制 UI(如弹窗等),诱骗用户点击和提交表单
    • 分类:
      • 存储型 XSS(Stored XSS):恶意脚本存在数据库中
      • 反射型 XSS(Reflected XSS):恶意脚本存在 URL 中
      • 基于 DOM 的 XSS(DOM-Based XSS):与反射型 XSS 相似,但不需要服务器的参与
      • Mutation-Based XSS:利用浏览器渲染 DOM 的特性进行攻击,针对不同的浏览器会有区别
  • 跨站伪造请求(Cross-Site Request Forgery,CSRF
    • 特点:在用户不知情的情况下,利用用户权限(cookie),构造指定 HTTP 请求,窃取和修改用户敏感信息
  • 注入(Injection)
    • 分类:
      • SQL 注入(SQL Injection)
      • CLI 注入(CLI Injection)
      • 命令行注入(OS Command Injection)
      • 服务端伪造请求(Server-Side Request Forgery,SSRF)
  • DoS(Denial of Server)
    • 特点:攻击者通过构造特定请求,导致服务器资源被显著消耗,导致请求挤压,进而雪崩效应
    • 分类:
      • 基于正则表达式的 DoS(ReDoS):利用正则表达式中贪婪匹配的回溯行为进行攻击
      • DDoS(Distributed DoS):短时间内向服务器发送大量来自僵尸设备的请求,服务器不能及时完成全部请求,导致请求堆积
  • 中间人攻击
    • 原因:
      • 明文传输
      • 信息篡改不可知
      • 对方身份未验证

2. 防御篇

  • XSS
    • 不要将用户提交的内容直接转换成 DOM,主流默认框架都默认防御 XSS 攻击
    • 如果一定需要将用户提交的内容转换成 DOM,则需要对内容进行转义(需要注意:SVG 中也可以存在脚本
    • 避免用户自定义的链接跳转
    • 避免用户自定义的样式

关于浏览器的安全策略:

  • 同源策略(Same-Origin Policy):只有同源(协议、域名、端口相同)的 URL 能相互访问
  • 内容安全策略(Content Security Policy,CSP):开发者可以定于哪些源是安全的,只有来自安全源的脚本可以执行,如:
    • 通过响应头设置:Content-Security-Policy: script-src 'self' http://domain.com表示只有当前域名和 domain.com 域名下的脚本可以执行
    • 通过 meta 标签设置:<meta http-equiv="Content-Security-Policy" content="script-src self http://domain.com">
  • CSRF
    • 使用 token 进行验证
    • 设置X-Frame-Options: DENY/SAMEORIGIN防御 iframe 攻击(iframe 中可以发送相对于其自身同源的请求)
    • 使用 Same-Site Cookie 避免用户信息被携带
  • DDoS
    • 流量治理
      • 负载均衡
      • API 网关
      • CDN
    • 快速自动扩容
    • 非核心服务降级
  • 中间人攻击
    • 使用 HTTPS 协议
      • 可靠性:加密
      • 完整性:MAC 验证
      • 不可依赖性:数字签名

三、课后个人总结

这节课上老师介绍了 Web 中常见的几类攻击方式并且讲解了对应的防御策略。在实际开发过程中,我们应该在编码时保持谨慎,在后期 Review 时全面地考虑问题,同时积极地学习关于网络安全的新知识,以避免安全漏洞的出现。

四、引用参考