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

28 阅读2分钟

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

网络安全问题似乎自从网络诞生之初就存在了,直到现在仍有相当多的安全问题困扰着开发者和用户。感觉这是一节很重要又很有趣的一堂课。

案例

  • 2021年发生过steam免费充值的安全事件
  • 2022年发生过xxt泄漏学生信息事件

安全问题通常危害:

  • 用户
  • 公司
  • 程序员(祭天)

攻击篇

XSS

cross-site scripting 跨站脚本攻击,页面中注入恶意脚本,用户打开网页后运行。开发者盲目信任用户提交内容,其中包括一些可执行脚本。

特点:

  • UI无法感知
  • 窃取cookie/token
  • 绘制UI诱骗用户点击填写表单

分类

  • stored XSS
    • 脚本存到数据库中
    • 访问页面->读数据->被攻击
    • 对所有用户可见
  • reflected Xss
    • 不涉及数据库
    • 从URL攻击(请求参数)
  • DOM-based XSS
    • 不需要服务器参与
    • 攻击发起和执行在浏览器完成
  • mutation-based XSS
    • 利用浏览器渲染特性
    • 按浏览器攻击

CSRF

cross-site request forgery 跨站伪造请求

特点

  • 用户不知情前提下
  • 利用用户权限(cookie)
  • 构造制定http请求,窃取信息

Injection

注入攻击

分类:

  • SQL 注入
  • CLI 客户端
  • OS command 系统命令
  • server-side request forgery (SSRF) 服务端伪造请求,不一样但原理类似

DoS

Denial of Service 服务拒绝,通过一些方式导致服务器资源过度消耗导致请求挤压。

分类:

  • ReDoS 基于正则表达式的DoS
  • Distributed DoS(DDoS) 大量僵尸设备请求
  • Logical DoS
    • 耗时的同步操作
    • 数据库写入
    • SQL join
    • 文件备份
    • 循环执行逻辑

中间人攻击

浏览器和服务器中间插入中间人,看数据,改数据

防御篇

XSS

  • 永远不要相信用户提交的内容
  • 不要将提交内容转成DOM

现成工具

  • 主流前端框架默认防御
  • google-closure-library
  • DOMPurify(node)

CSRF

特判合法来源的请求

  • Origin + Referrer
  • 先有页面后有请求
  • token绑定+过期时间(向前保密)
  • 开发时注意借口等使用规范
  • SameSite(cookie对应页面域名) / CORS(类似白名单)
  • 设置中间件解决所有csrf问题

Injection

  • 在使用sql查询的地方使用预处理
  • 所有命令不用sudo
  • 删除命令建立名单
  • 内网访问限制

DoC

  • 规范正则表达式代码,代码扫描,不用用户提供的表达式
  • DDoS进行过滤,抗量

中间人

  • HTTPS,HTTP3
  • SRI 对比hash