Web开发中常见的安全问题及防范 | 青训营笔记

122 阅读4分钟

说明

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

在web开发中,可能会出现各种各样的安全问题。如果不加以防范,有可能造成很严重的后果,本文将介绍web开发中常见的各种安全问题以及如何防范。

本文将介绍的安全问题包括:

  • Cross-Site Scripting(XSS)
  • Stored XSS
  • Reflected XSS
  • DOM-based XSS
  • Mutation-based XSS
  • Cross-site request forgery(CSRF)
  • SQL Injection
  • Server-Side Request Forgery(SSRF )
  • Denial of Service(DoS)
  • ReDoS:基于正则表达式的DoS
  • Logical DoS
  • Distributed DoS(DDoS)
  • 中间人攻击

1. XSS

全称 Cross-Site Scripting,也叫跨站点脚本攻击。

XSS的特点:

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

XSS主要利用了:

image-20220802101759484

其他类型的XSS攻击

Stored XSS(存储型)

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

Reflected XSS(反射性)

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

image-20220804153643581

DOM-based XSS(基于DOM型)

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

image-20220804153809562

Mutation-based XSS

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

如何防御?

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

image-20220804152822623

防御——现成工具

前端

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

服务端

  • DOMPurify

2. CSRF

全称 Cross-site request forgery,跨站请求伪造。

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

CSRF demo

image-20220804154553027

GET请求:

image-20220804154612854

POST请求:

image-20220804154637831

3. SQL Injection

SQL注入,读取请求字段,直接以字符串的形式拼接 SQL 语句。

流程如下:

image-20220804154950918

SQL injection demo

image-20220804155147874

如何防御SQL注入?

  • 最小权限原则。

    • suto || root
  • 建立允许名单 + 过滤。

    • rm
  • 对 URL 类型参数进行协议、域名、ip等限制。

    • 访问内网

其他 Injection

  • CLI:命令行攻击。
  • OS command:操作系统命令攻击。
  • Server-Side Request Forgery(SSRF):服务器端的伪造请求,严格来说SSRF不是injection,但原理类似。

3. DoS

全称 Denial of Service,服务拒绝。

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

  • ReDos:基于正则表达式的 Dos,当服务端采用贪婪匹配时,😈传入一个可回溯的字符串,导致服务器响应时间延长,导致响应用户次数降低。

image-20220804160458278

  • Logical Dos:

    • 耗时的同步操作。

    • 数据库写入。

    • SQL join。

    • 文件备份。

      • 循环执行逻辑。

如何防御?

  • Regex DoS

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

    • 有些案例只有在请求量达到一定之后,才会体现。

    • 分析代码中的性能瓶颈

      • 同步调用
      • 串行调用
      • CPU 密集型操作
    • 限流

4. DDoS

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

攻击特点:

  • 直接访问IP。
  • 任意 API。
  • 消耗大量带宽(耗尽)

SYN flood demo

image-20220804160920188

如图,攻击者创建大量SYN给服务器,服务器会返回ACK和SYN,但攻击者此时不会返回第三次ACK,导致第三次握手未完成,连接数不能被释放,等服务器达到最大连接次数,所有的新请求都无法响应,完成一次洪水攻击。

如何防御?

image-20220804202526768

5. 基于传输层进行攻击

中间人攻击

特点:

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

流程如下图:

image-20220804161235725

如何防御?

image-20220804202620204

HTTPS的一些特性

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

HTTPS 可靠性:TLS 握手

image-20220804202805291

HTTPS 完整性

image-20220804202904364

HTTPS 不可抵赖性:数字签名

image-20220804203645789

总结

冲浪需谨慎,莫点毒链接。

开发不规范,亲人两行泪。