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

56 阅读4分钟

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

攻击篇

XSS (跨站脚本攻击)

攻击者利用盲目信任用户提交的内容, 直接把用户提交的字符串转化成DOM,从而造成XSS攻击

image.png

XSS的特点:

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

Stored XSS (存储型XSS)

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

image.png

image.png

Reflected XSS

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

image.png

image.png 把用户输入的数据反射给浏览器,需要诱导用户点击一个恶意链接才能攻击成功

DOM-based XSS

image.png

image.png

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

Mutation-based XSS

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

image.png

image.png

CSRF (跨站伪造请求)

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

image.png

Injection

SQL Injection

服务器端用字符串凭借SQL语句注入恶意

image.png

SSRF

Server-Side Request Forgery

  • 请求用户自定义的callback URL
  • web server通常有内网访问权限

image.png

DoS

Denial of Service

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

ReDos

基于正则表达式的DOS

贪婪: n次不行?n-1次再试试,即回溯的方法([?] vs [no ?] :一个即可 vs 尽可能多的)

image.png

不恰当的正则, 可以大大提高响应时间, 降低接口吞吐量

DDoS

Distributed Dos

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

特点:

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

image.png

SYN洪水攻击, 攻击者发送大量TCP请求, 发送大量SYN给服务器, 服务器返回ACK + SYN, 但攻击者不返回ACK, 导致TCP三次握手无法完成, connection不能被释放, 达到最大连接次数后, 服务器无法响应请求

中间人攻击 (传输层)

image.png

特点

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

防御篇

XSS

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

  • 不要讲用户提交的内容直接转化未DOM

image.png

现成工具

前端

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

服务端 (Node)

  • DOMPurify

如果必须动态生成DOM

注意

  • string转DOM, 要先对string进行转义
  • 上传svg文件, 先对svg进行扫描, 防止恶意的script标签
  • 自定义的跳转行为,做好过滤
  • 自定义样式要仔细检查,防止出现发送get请求等

Same-origin Policy (同源策略)

协议, 域名, 端口均相同才是同源, 否则是跨域

image.png

Content Security Policy (内容安全策略)

image.png

CSRF的防御

利用请求头部防御

可用请求头部的Origin或Referer判断请求是否来自安全源

image.png

利用token防御

用户端请求页面, 服务端会返回页面+token, 客户端API+token发送请求, 服务端验证token后返回数据

image.png

iframe攻击

image.png

防御anti-pattern

使用GET请求的就只使用GET请求,不要将POST和GET请求写在一起,会造成攻击的漏洞

image.png

SameSite Cookie

image.png

如果依赖Cookie的第三方服务,内嵌一个X站播放器, 识别不了用户登录态, 发不了弹幕

image.png

Injection

SQL

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

image.png

Injection(除了SQL)

image.png

防御DOS

Regex DoS

  • Code Review 避免不好的正则
  • 代码扫描 + 正则性能测试
  • 用户提供的使用正则不采用

Logical DoS

image.png

DDoS

  • 流量治理 (过滤)
    • 负载均衡
    • API网关
    • CDN
  • 快速自动扩容 (扛量)
  • 非核心服务降级 (扛量)

传输层 -- 防御中间人

使用HTTPS

image.png

HTTPS特性

  • 可靠性
  • 完整性
  • 不可抵赖性