Web安全 | 青训营笔记

106 阅读4分钟

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

XSS

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

向网页中注入恶意脚本

攻击

利用点

  • 盲目信任用户提交的内容
  • 代码直接将用户提交的字符串转换成DOM

特点

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

分类

  • Stored XSS
    • 恶意脚本被存入数据库,访问页面相当于读取了数据即被攻击
    • 危害最大,对全部用户可见
  • Reflected XSS
    • 不涉及数据库,从URL上攻击
    • 例如URL的param参数<div>${param}</div>
  • DOM-based XSS
    • 不需要服务器参与,恶意攻击的发起和执行全在浏览器完成
  • Mutation-based XSS
    • 利用了不同浏览器不同的DOM渲染方式,针对某一浏览器进行攻击
    • 四类中最巧妙且最难防御的

防御

原则:永远不信任用户的提交内容

现成工具

  • 前端:主流框架默认防御XSS;google-closure-library
  • 服务端:Node-DOMPurify

实践

  • 不要将用户提交的内容直接转换为DOM
  • SVG 文件要扫描
  • 尽量不允许用户进行自定义跳转行为,允许要做过滤
  • 留意用户自定义样式

CSRF

Cross-Site Request Forgery (CSRF) 跨站伪造请求

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

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

  • 设定哪些源(域名)是安全的,安全源的脚本可执行,否则报错
  • 拒绝eval和内联脚本

攻击

  • 常用攻击方式Get,如将GET和POST逻辑指向同一个接口
  • <ifame>攻击,来自同源请求

防御

  • origin + referrer
  • token
  • X-Frame-Option:DENY/SAMEORIGIN
  • 中间件
  • SameSite Cookie 属性
    • 避免用户信息被携带
    • 依赖Cookie的第三方服务,允许携带但要标记为Sesure

Injection

注入攻击的本质,是把用户输入的数据当做代码执行
XSS本质上也是一种针对HTML的注入攻击

攻击

条件

  • 用户能够控制输入
  • 原本程序要执行的代码,拼接了用户输入的数据

SQL Injection

  • SQL参数恶意注入
  • ❌SQL语句直接以字符串的形式拼接语句

其它注入

  • CLI 命令行,❌执行参数不做过滤
  • OS command 系统命令,❌暴露可以读取和修改文件

原理类似

  • Server-Site Request Forgery (SSRF),服务端伪造请求
  • ❌对callback不进行过滤,暴露内网信息

防御

原则:数据与代码分离

  • SQL:prepared statement
  • 最小原则,不要通过sudo执行,不给root权限
  • 建立白名单机制和过滤原则
  • SSRF:对URL类型参数进行协议、域名、IP等限制

DoS

Denial of Service (DoS) 服务拒绝

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

攻击

Regex DoS (ReDoS)

  • 基于正则表达式的DoS
  • 利用点:匹配的贪婪模式(有多少要多少;非贪婪,有一个就够了)
  • 攻击者可以构造一个容易发生回溯行为的字符串,造成服务器响应时间大幅升高

Distributed DoS (DDoS)

  • 短时间内,服务器收到大量僵尸设备的请求流量,导致服务器的请求堆积,造成雪崩
  • 常见攻击方式
    • 洪水攻击SYN Flood,不让服务器完成请求过程,使其达到最大连接数且连接无法释放
    • 基于传输层:中间人攻击,介入浏览器和服务器中间

防御

ReDos

  • 避免贪婪模式
  • 代码扫描工具+正则性能测试
  • 拒绝使用用户提供的正则表达式

DDoS

  • 流量治理
    • (过滤)负载均衡
    • (过滤)API网关层面,识别流量
    • (抗量)域前置CDN(Content delivery networks,内容分发网络)
  • (抗量)快速自动扩容
  • (抗量)非核心服务降级

防御中间人攻击

  • HTTPS
    • 可靠性:对称加密和非对称加密,避免明文传输
    • 完整性:MAC验证规则,确保信息未被篡改
    • 数字签名:CA(证书机构)签名校验,确认身份
  • HTTP Strict-Transport-Security (HSTS)
    • 将HTTP主动升级到HTTPS
  • Subresource Integrity (SRI)
    • hash算法对比前后资源,确保静态资源不被挟持篡改

安全无小事,处处需留心