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

61 阅读2分钟

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

攻击

跨站脚本攻击Cross-Site Scripting(XSS)

  • 注入恶意脚本
  • 方式
    • 开发者盲目信任用户提交内容
    • 直接把用户提交字符串转化成DOM
      • document.write
      • element.innerHTML = anyString
      • SSR(user_data) //伪代码
    • 特点
      • 通常难以从UI上感知(暗地执行脚本)
      • 窃取用户信息(cookie、token)
      • 绘制UI(例如弹窗),诱骗用户点击/填写表单
  • 未防范

image.png

  • 攻击

image.png

  • 类型

    • stored XSS

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

      • 不涉及数据库
      • 从URL上攻击

      image.png

    • DOM-based XSS

      • 不需要服务器参与
      • 恶意攻击的发起+执行全在浏览器完成

      image.png

    • Reflected vs DOM-based

      image.png

    • Mutation-based XSS

      • 利用了浏览器渲染DOM的特性(独特优化)
      • 不同浏览器,会有区别(按浏览器进行攻击)

      image.png

跨站轨道请求Cross-site request forgery(CSRF)

  • 特点:在用户不知情的前提下,利用用户权限(cookie),构造指定HTTP请求,窃取或修改用户敏感信息

image.png

注入Injection

  • SQL Injection过程

image.png

image.png

  • 其他方式

    • CLI

    image.png

    image.png

    • OS command

    image.png

    • Server-Side Request Forgery(SSRF),服务端伪造请求(原理类似)

    image.png

服务拒绝Denial of Service(DoS)

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

  • 正则表达--贪婪模式

    • 重复匹配时「?」 vs 「no ?」︰满足“一个“即可vs尽量多

image.png

  • 基于正则表达式的DoS:通过回溯行为进行攻击

Distributed DoS(DDoS)

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

image.png

中间人攻击

image.png

防御

XSS 的防御

  • 永远不要信任用户提交内容

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

  • 工具

    • 前端
      • 主流框架默认防御
      • google-closure-library
    • 服务端
      • DOMPurify
  • 必要情况下

    • string->DOM
      • 对string转义
    • 上传svg
      • 扫描文件
    • Blob动态生成script
      • 做过滤
    • 自定义样式
      • 额外留意风险地点
  • 同源:协议、域名、端口相同

  • 内容安全策略Content Security Policy(CSP)

    • 定义哪些源安全,只接受指定源脚本,其他报错

    image.png

防御 CSRF 的正确姿势

  • 限制请求来源

image.png

image.png

image.png

  • iframe攻击

image.png

  • anti-pattern

    • GET != GET + POST

    image.png

  • SameSite Cookie

image.png

image.png

  • SameSite vs CORS

image.png

image.png

防御 DoS

  • Regex DoS

image.png

  • DDoS

image.png

防御 Injection

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

image.png

防御中间人

HTTPS的一些特性

  • 可靠性:加密

  • 完整性:MAC验证

  • 不可抵赖性:数字签名

  • HTTPS的大致流程

image.png

  • HTTPS完整性

image.png

  • 数字签名

image.png

  • 不可抵赖性

image.png

  • HTTP Strict-Transport-Security(HSTS)

    • 将HTTP主动升级未HTTPS

    image.png

  • Subresource Integrity(SRI)

    image.png