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

42 阅读2分钟

1. 攻击篇

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

  1. 主要利用了

    • 盲目信任用户的提交内容
    • string -> DOM
      • document.write
      • element.innerHTML = anyString
      • SSR(user_data) // 伪代码
  2. 主要特点

    • 通常难以从 UI 上感知(暗地执行脚本)
    • 窃取用户信息(cookie/token)
    • 绘制 UI(例如弹窗),诱骗用户点击/填写表单
  3. 分类

类别特点举例
Stored XSS1. 恶意脚本被存在数据库中
2. 访问页面 -> 读数据 === 被攻击
3. 危害最大,对全部用户可见
某个视频网站存在XSS漏洞,某人上传一段视频,之中插入一段XSS恶意脚本,之后所有观看该视频的用户都会被XSS攻击
Reflected XSS1. 不涉及数据库
2. 从 URL 上攻击
image.png image.png
Dom-based XSS1. 不需要服务器的参与
2. 恶意攻击的发起+执行,全在浏览器完成
image.png image.png
Mutation-based XSS1. 利用了浏览器渲染 DOM 的特性(独特优化)
2. 不同浏览器,会有区别(按浏览器进行攻击)
image.png 以上HTML片段在Chrome浏览器中渲染为如下: image.png
  • Reflected XSS与Dom-based XSS完成注入脚本的地方:

image.png

1.2. 跨站伪造请求:Cross-site request forgery(CSRF)

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

1.3. 注入:Injection

  1. SQL Injection

image.png

  1. 不止于SQL
  • CLI
  • OS command
  • Server-Side Request Forgery(SSRF),服务端伪造请求,严格而言,SSRF 不是 injection,但是原理类似

1.4. 服务拒绝:Denial of Service(DoS)

  1. 特点

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

类别特点举例
ReDoS:基于正则表达式的 DoS
Logical DoS1. 耗时的同步操作
2. 数据库写入
3. SQL join
4. 文件备份
5. 循环执行逻辑
image.png
Distributed DoS(DDoS)短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求(不搞复杂的,量大就完事儿了)
1. 直接访IP
2. 任意API
3. 消耗大量带宽(耗尽)
image.png

1.5. 中间人攻击

造成原因:

  • 明文传输
  • 信息篡改不可知
  • 对方身份未验证 image.png

2. 防御篇

2.1. XSS 的防御

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

image.png

  • 现成工具
    1. 前端:
      • 主流框架(React、Vue等)默认防御XSS
      • google-closure-library
    2. 服务端(Node)
      • DOMPurify

2.2. 防御 CSRF 的正确姿势

image.png

2.3. 防御 DoS

2.4. 防御 Injection

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

2.5. 防御中间人

image.png