Web开发的安全之旅

164 阅读4分钟

攻击篇

Cross-Site Scripting(XSS)

跨站脚本攻击

开发者:

  1. 盲目信任用户提交的内容
  2. 把用户提交的字符串直接渲染进了DOM

特点

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

攻击者

  • 可以直接提交恶意脚本

Stored XSS

存储型XSS

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

Reflected XSS

反射型XSS

  • 不涉及数据库
  • 从URL上攻击 在服务端进行注入

DOM-based XSS

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

Mutation-based XSS

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

Cross-site request forgery(CSRF)

跨站伪造请求

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

常用GET请求,也可用其他请求

Injection

注入

SQL Injection

恶意的SQL参数,更改数据库

Injection 不止于 SQL

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

Denial of Service(DoS)

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

ReDOS:基于正则表达式的DoS

回溯正则表达式

Distributed DoS(DDoS)

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

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

中间人攻击(传输层)

  1. 明文传输
  2. 信息篡改不可知
  3. 对方身份未验证

防御篇

XSS

  • 永远不信任用户提交的内容
  • 不要将用户提交的内容直接转换成DOM

现成工具

前端

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

如果非要动态生成DOM,要注意

  1. string-->Dom。对string进行转义
  2. 上传svg。对svg进行扫描,因为svg里允许插入js脚本,所以要进行扫描
  3. 自定义跳转连接。做好过滤
  4. 自定义样式

CSRF 的防御

Origin+Referer

if 伪造请求 = 异常来源
then 限制请求来源 -->限制伪造请求
- Origin
    - 同源请求中,GET + HEAD 不发送
- Referer

token

先有页面,再有请求

if 请求来自合法页面
then 服务器接受过页面请求
then 服务器可以标

image.png

  1. 用户绑定:攻击者也可以是注册用户 === 可以获取自己的token
  2. 过期时间:前向保密

iframe攻击

设置 X-Frame-Option:DENY(禁止作为Iframe)/SAMEORIGIN(允许同源)

anti-pattern

GET!==GET+POST get的接口不要做修改数据的行为

SanmeSite Cookie 根源解决 CSRF

限制的是:

  1. Cookie domain
  2. 页面域名

防御CSRF的正确姿势

写一个中间件

SameSite vs CORS

SameSite                      CORS(跨域资源共享)
- Cookie 发送                  资源读写(HTTP请求)
- domain vs 页面域名           资源域名 vs 页面域名  
- "出了屋就不认了"              白名单

Injection

SQL Injection

  • 找到项目中查询SQL的地方

  • 使用 prepared statement

  • 最小权限原则

    • sudo || root
  • 建立允许名单 + 过滤

    • rm
  • 对URL类型参数进行协议、域名、ip等限制

Regex Dos

  • Code Review
  • 代码扫描 + 正则性能测试
  • x用户提供的使用正则

DDoS

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

传输层--防御中间人

HTTPS = HTTP + TLS(HTTP3已经内置TLS)

  • 可靠性:加密
  • 完整性:MAC验证
  • 不可依赖性:数字签名

Same-origin Policy 同源策略(SOP)

  • 协议
  • 域名
  • 端口

Content Security Policy(CSP)

  • 哪些源(域名)被认为是安全的
  • 来自安全源的脚本可以执行,否则直接抛错
  • 对 eval + inline script 说 达咩

可以在服务器响应头部设置,浏览器meta标签设置