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

100 阅读3分钟

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

攻击篇

跨栈脚本攻击XSS

通过执行恶意脚本完成攻击

xss.JPG

XSS主要利用了两大部分

xss1.JPG

XSS的一些特点

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

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

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

XSS攻击的类型

  1. 存储型XSS攻击(Stored XSS)
  • 恶意脚本被存在数据库中

  • 访问页面->读数据=被攻击

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

  1. 反射型XSS攻击(Reflected XSS)
  • 不涉及数据库,从URL上攻击
反射.JPG
  • 在服务端恶意注入脚本

恶意.JPG

  1. 基于DOM的XSS攻击(DOM-based XSS)
  • 不需要服务器的参与

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

dom图.JPG
  • 在浏览器恶意注入脚本

恶意2.JPG

  1. 基于Mutation的XSS攻击(Mutation-based XSS)
  • 利用了浏览器渲染DOM的特性(独特优化)

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

跨栈伪造请求CSRF

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

GET请求方式

get.JPG

注入攻击(Injection)

  1. 常见的SOL Injection
注入.JPG
  • 执行
执行.JPG
  • 读取+修改
读取.JPG
  1. CLI

  2. OS command

  3. Server-Side Request Forgery(SSRF),服务端伪造请求。严格来说,SSRF不是injection,但原理类似

ssrf.JPG

服务拒绝(DOS)——Denial of Service

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

正则表达式——贪婪模式

重复匹配时[?] vs [no ?] : 满足“一个”即可 vs 尽量多

正则.JPG

  1. 基于正则表达式的DoS

贪婪:n次不行?n-1次再试试?——回溯

回溯.JPG
  1. DDoS(Distributed DoS)

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

攻击特点:

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

中间人攻击(传输层)

中间人.JPG

发生原因:

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

防御篇

XSS

  1. 永远不信任用户提交内容;不要将用户提交内容直接转换成DOM
x防御.JPG
  1. 现成的防御工具
  • 前端

    • 主流框架默认防御XSS
    • google-colsure-library
  • 服务端(Node)

    • DOMPurify
  1. 用户要求必须动态生成DOM,需注意
  • string->DOM:对string进行转义

  • 上传svg:对svg进行扫描

  • 自定义跳转链接:尽量不做该行为,如果做了要做好过滤

  • 自定义样式:额外留意可以设置url的地方

同源策略(Same-origin Policy)

两个url的协议、域名、端口都相等

CSP内容安全策略

  • 哪些源(域名)被认为是安全的

  • 来自安全源的脚本可以执行,否则直接抛借

csp.JPG

CSRF的防御

  1. origin和referer判断请求来自于合法来源
请求头.JPG
  • 其他判断

其他.JPG

  1. iframe攻击

ifr.JPG

  1. anti-pattern
ant.JPG
  1. SameSite Cookie避免用户信息被携带
sam.JPG
  • SameSite vs CORS
sc.JPG
  1. 防御CSRF的正确姿势
防.JPG

Injection相关的防御

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

  • 最小权限——sudo || root

  • 建立允许名单+过滤—— rm

  • 对URL类型参数进行协议、域名、ip等限制——访问内网

防御DOS

  • 正则表达式的DOS
re.JPG
  • DDOS

呆呆.JPG

传输层——防御中间人

传输.JPG

HTTPS的一些特征

  • 可靠性:加密

  • 完整性:MAC验证

完整.JPG
  • 不可抵赖性:数字签名

    • 数字签名
数字.JPG

数字签名在HTTPS中的工作

工作.JPG
  • HSTS
函数.JPG
  • SRI
sri.JPG

推荐读物