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

33 阅读2分钟

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

攻击

XSS

Cross-Site Scripting

跨站脚本攻击

向用户访问的网站中植入恶意脚本

  • 难以自UI上感知
  • 窃取用户信息 cookie、token 等
  • 绘制UI

常因后台未对评论区等提交内容进行过滤转义等导致

Stored XSS

恶意脚本被存在数据库中

Reflected XSS

URL 的 param 参数,恶意攻击在服务端完成

DOM-based XSS

URL 的 param 参数,恶意攻击在客户端完成

Mutation-based XSS

基于不同浏览器的渲染细节按浏览器类型进行攻击

CSRF

跨域伪造请求

GET请求

POST请求

Injection

SQL 注入

SQL 参数未经检验与过滤导致构造SQL语句能够执行恶意操作

CLI 注入

命令行注入

OS command

读取及修改系统或服务器关键文件

SSRF

DoS

Denial of Service

通过构造特定类型请求,导致服务器资源被显著消耗,无法及时响应请求,导致服务崩溃

ReDoS

基于正则表达式的 DoS

利用正则表达式攻击

Logical DoS

耗时的同步操作

数据库写入

SQL join

文件备份

循环执行逻辑

DDos

短时间内大量僵尸设备同时请求同一服务器,耗尽带宽导致服务器崩溃

直接访问 IP、任意 API、消耗大量带宽

传输层

中间人攻击

中间人劫持浏览器与服务器的传输,实现窃取信息、修改请求返回等

防御

XSS

永远不要相信用户提交内容

永远不要直接把用户提交内容转换为 DOM

前端

主流框架 google-closure-library

后端

node DOMPurify

string -> DOM,使用 DOMParser()

上传 svg

Blob 动态生成 script

自定义跳转链接

自定义样式

CSP | Content Security Policy

仅允许来自安全源的脚本运行

阻止 eval 与 inline1 script 执行

CSRF

检测请求头 origin 和 referer

使用 token 字段

iframe请求,使用 X-Frame-Options

避免 GET 和 POST 等使用方法的混用,建议类似 Restful 的使用方式

同域 SameSite,设置 Set-Cookie: SameSite=None

Injection

SQL 预编译

控制权限

建议允许访问清单

限制和检测URL参数

DoS

代码检测 Code Review 和测试 Test

避免使用用户提供的正则

DDoS

流量治理

快速自动扩容

非核心服务降级

中间人

使用 HTTPS

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

数字签名

public key + private key

SRI

哈希算法

阻止静态资源被篡改