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

120 阅读4分钟

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

攻击篇

Cross-Site Scripting(XSS)

跨站脚本攻击
访问页面时,被攻击者注入恶意脚本,对页面产生了攻击
XSS = 网站盲目信任用户提交的内容 + 网站将string转化成了DOM
document.write,element.innerHTML = anyString,SSR(user_data)

  • 特点
    通常难以从UI上感知(暗地执行脚本)
    窃取用户信息(cookie/token)
    绘制UI(例如弹窗),诱骗用户点击/填写表单
  • Stored XSS
    存储型XSS攻击,恶意脚本会被存到数据库中,访问页面时读数据即被攻击;危害最大,对全部用户可见
  • Reflected XSS
    反射型XSS攻击,不涉及数据库,从URL上攻击。
    image.png
    image.png
  • DOM-based XSS
    基于DOM的XSS攻击,不需要服务器参与,恶意攻击的发起和执行全在浏览器完成
    image.png
  • Reflected和DOM-based区别
    完成注入脚本的地方不同
    image.png
  • Mutation-based XSS
    利用了浏览器渲染DOM的特性(独特优化),按浏览器的类型进行攻击
    image.png

Cross-site request forgery(CSRF)

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

Injection

注入

  • SQL Injection image.png
    demo1
    image.png
  • CLI
  • OS command
  • Server-Side Request Forgery(SSRF)服务器伪造请求
    不是injection,但原理类似
    demo1 删除
    image.png
    image.png
    image.png
    demo2 读取+修改
    image.png
    image.png

Denial of Service(DoS)

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

  • 正则表达式贪婪模式
    image.png
  • ReDoS
    基于正则表达式的DoS,产生大量回溯行为
    image.png
  • Distributed DoS(DDoS)
    短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。
    耗时的同步操作,数据库写入,SQL join,文件备份,循环执行逻辑
    demo 洪水攻击
    三次握手攻击者不返回第三次ACK,导致连接不能被释放
    image.png

中间人攻击

基于传输层的攻击
image.png
在浏览器和服务器中插入一个中间人。

防御篇

XSS

永远不要相信用户提交的内容,不要将提交的内容直接转换成DOM
现成工具:

  1. 前端:主流框架默认防御XSS,google-closure-library
  2. 服务器(Node):DOMPurify
  • 如果用户必须要求上传动态DOM
    string->DOM:要对string进行转译,new DOMParser()
    如果允许上传svg,需要对svg进行扫描
    跳转链接,Blob动态生成script
    自定义样式
    image.png

Content Security Policy(CSP)

内容安全策略
允许开发者定义哪些源是安全的;来自安全源的脚本可执行,否则直接报错;对eval+inline script直接报错

  • Same-origin Policy同源策略
    同源:协议 域名 端口全都一致
    HTTP请求:同源没问题,跨域不可行
  • 服务器响应头部
    image.png
  • 浏览器meta
    image.png

CSRF的防御

  • 通过请求头部的Origin和Referer判断是否为同源
    Origin只存在于POST请求,而Referer则存在于所有类型的请求。 image.png
  • token
    image.png
    image.png
  • X-Frame-Options响应头
    DENY:当前页面不能被iframe加载;SAMEORIGIN:同源页面才能加载当前iframe。
    iframe攻击,在iframe中跳跃到同源网站进行请求
    image.png
  • CSRF anti-pattern
    避免以下代码模式
    image.png
  • 避免用户信息被携带:SameSite Cookie
    如果CSRF利用用户权限,用户权限在cookie中;如果请求不带cookie,则没有问题。
    image.png
    image.png
  • SameSite vs CORS
    SameSite:针对Cookie发送,对比cookie的domain属性与当前页面域名是否一致,限制条件是当前页面。
    CORS:针对资源读写/HTTP请求限制,对比资源域名与当前页面域名,是白名单机制,允许访问才能访问。

注入

找到代码中查询SQL的地方,使用prepared statement,将SQl语句进行提前编译,导致注入攻击不能完成。

  • 最小权限原则
    所有命令没有root权限,不能用sudo执行
  • 建立允许名单和过滤
    不能使用rm
  • 对url参数类型进行协议、域名、ip等限制
    不能访问内网

防御DoS

  • Regex DoS
    完善代码,避免正则匹配贪婪模式
    代码扫描+正则性能测试
    拒绝用户提供的使用正则
  • DDoS
    流量治理:负载均衡、API网关、前置CDN
    快速自动扩容
    非核心业务降级

传输层——防御中间人

HTTP3内置了TLS1.3

  • HTTPS特性:
    image.png
  • TLS过程:
    image.png
  • HTTPS完整性
    传输内容包含加密信息和加密信息哈希值
  • HTTPS的不可抵赖性:数字签名
    image.png
  • HSTS
    将HTTP主动升级为HTTPS
    image.png