Web开发安全 | 青训营笔记

48 阅读3分钟
  • 这是我参与「第四届青训营 」笔记创作活动的第6天

    以下为日常上课笔记,有关于Web开发安全的一些基础内容

  • 安全问题"很常见”,会危害

    • 用户

    • 公司

    • 程序员(祭天)

  • 两个角度看web安全

    • 假如你是一个hacker——攻击

      • Cross-Site Scripting(XSS)

        • 举例

        • XSS主要利用了

        • 特点

          • 通常难以从UI上感知(暗地执行脚本)

          • 窃取用户信息(cookie/token)

          • 绘制UI(例如弹窗),诱骗用户点击/填写表单

        • demo

        • 可以直接提交恶意脚本

        • Stored XSS

          • 特点

            • 恶意脚本被存在数据库中

            • 访问页面→读数据被攻击

            • 危害最大,对全部用户可见

          • 举例

        • Reflected XSS

          • 特点

            • 不涉及数据库

            • 从URL上攻击

          • demo

        • DOM-based XSS

          • 特点

            • 不需要服务器的参与

            • 恶意攻击的发起+执行,全在浏览器完成

          • demo

          • 和Reflected XSS对比

            • 完成注入脚本的地方不同

        • Mutation-based XSS

          • 特点

            • 利用了浏览器渲染DOM的特性(独特优化)

            • 不同浏览器,会有区别(按浏览器进行攻击)

          • demo

      • Cross-site request forgery(CSRF)

        • 特点

          • 在用户不知情的前提下

          • 利用用户权限(cookie)

          • 构造指定HTTP请求,窃取或修改用户敏感信息

        • demo

        • GET

        • beyond GET

      • Injection

        • SQL Injection

          • 原理

          • demo

        • CLI

          • demo

            • 执行

            • 读取+修改

        • OS command

        • server-Side Request Forgery(SSRF),服务端伪造请求
          严格而言,SSRF 不是injection,但是原理类似

          • demo

      • Denial of Service(DoS)

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

        • ReDoS:基于正则表达式的Dos

        • Logical DoS

          • 特点

            • 耗时的同步操作

            • 数据库写入

            • SQL join

            • 文件备份

            • 循环执行逻辑

          • demo

      • Distributed DoS(DDos)

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

        • 不搞复杂的,量大就完事儿了

        • 特点

          • 直接访问IP

          • 任意API

          • 消耗大量带宽(耗尽)

        • demo

      • 传输层

        • 中间人攻击

          • 发生原因

            • 明文传输

            • 信息篡改不可知

            • 对方身份未验证

          • 原理

    • 假如你是一个开发者——防御

      • XSS

        • 策略

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

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

          • 可用工具

        • 警惕

          • 上传svg

          • Blob 动态生成script

          • 自定义跳转链接

          • 自定义样式

      • Same-origin Policy

      • Content Security Policy(CSP)

        • 服务器的响应头部

        • 浏览器meta

      • CSRF的防御

        • token

        • iframe攻击

        • anti-pattern

          • GET!== GET+POST

        • 防御CSRF的正确姿势

          • 中间件

      • SameSite Cookie

        • 避免用户信息被携带

        • 限制的是:Cookie domain、页面域名

        • 依赖Cookie的第三方服务怎么办?

        • SameSite vs CORS

        • demo

      • Injection

        • 防御策略

        • Injection beyond SQL

      • DoS

        • Regex DoS

        • Logical Dos

      • DDoS

        • 防御

      • 传输层

        • 防御中间人

        • HTTPS的一些特性

        • TLS1.2握手

        • HTTPS——完整性

        • HTTPS——不可抵赖:数字签名

          • 数字签名

          • 原理

          • 浏览器内含大量CA证书

            • demo

          • 暴力破解,当签名算法不够健壮时

        • HTTP Strict-Transport-Security (HSTS)

          • 将HTTP主动升级到HTTPS

      • Subresource Integrity (SRI)

        • 防止

        • demo

          • 标签hash(原始内容hash) vs 实际内容hash
  • 补充

    • Feature Policy/Permission Policy

    • 安全无小事

    • 使用的依赖(npm package,甚至是NodeJS)可能成为最薄弱的一环

    • 保持学习心态

    • npm install除了带来了黑洞,还可以带来漏洞