这是我参与「第四届青训营 」笔记创作活动的的第10天。
假如你是一个开发者
防御篇
一、XSS
⭐ 永远不信任用户的提交内容
⭐ 不要将用户提交内容直接转换成DOM
现成工具
- 前端
- 主流框架默认防御 XSS
- google-closure-library
- 服务段 (Node)
- DOMPurify
二、Same-origin Policy:同源策略
三、Content Security Policy(CSP)
⭐ 哪些源(域名)被认为是安全的
⭐ 来自安全源的脚本可以执行,否则直接抛错
⭐ 对eval + inline script 说 🙅
三、CSRF
token
⭐ 用户绑定:攻击者也可以是注册用户 === 可以获取自己的token
⭐ 过期时间:【前向保密】
iframe 攻击
anti-pattern
⭐ GET !== GET + POST
⭐ 不要将 更新 + 获取 逻辑放到同一个 GET 接口,这样会一石二鸟
避免用户信息被携带:Samesite Cookie
依赖 Cookie 的第三方服务怎么办?
Samesite vs CORS
防御 CSRF 的正确姿势
⭐ 不可能 Case by case 防御,通过中间件来解决
四、Injection
SQL
⭐ 找到项目中查询 SQL 的地方
⭐ 使用 prepared statement
beyond SQL
⭐ 最小权限原则 :❌ sudo ll root
⭐ 建立允许名单 + 过滤:❌ rm
⭐ 对URL类型参数进行协议、域名、ip等限制 :❌ 访问内网
五、DoS
Regex DoS
⭐ Code Review (❌ /(ab*)+/)
⭐ 代码扫描 + 正则性能测试
⭐ ❌ 用户提供的使用正则
Logical DoS
⭐ 不是非黑即白
⭐ 有些case,只有在请求量大到一定之后,才会体现一分析代码中的性能瓶颈
- 同步调用
- 串行逻辑
- CPU密集型操作
⭐ 限流
DDoS
⭐ 流量治理
- 负载均衡
- API 网关
- CDN
⭐ 快速自动扩容
⭐ 非核心服务降级
传输层——防御中间人
六、尾声
⭐ 安全无小事
⭐ 使用的依赖(npm package ,甚至是 NodeJS)可能成为最薄弱的一环
- left-pad 事件
- eslint-scope 事件
- event-stream 事件
⭐ 保持学习心态
七、推荐读物
⭐ SameSite 那些事 | 怡红院落 (imnerd.org)