这是我参与「第五届青训营 」伴学笔记创作活动的第 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
哈希算法
阻止静态资源被篡改