这是我参与「第四届青训营 」笔记创作活动的第9天
防御篇
XSS
- 永远不信任用户提交内容
- 不要将用户提交内容直接转换为 DOM
现成工具
前端
- 主流框架默认防御XSS
- google-closure-library
服务器(Node)
- DOMPurify 当用户需求动态生成DOM时: !注意!: !! string->DOM
!! 上传svg
!! Blob 动态生成 script
!! 自定义跳转链接
!! 自定义样式
Content Security Policy(CSP)
- 那些源(域名)被认为是安全的
- 来自安全源的脚本可以执行,否则直接抛错
- 对eval + inline script 直接抛错
CSRF的防御
CSRF--token
CSRF--iframe 攻击
CSRF anti-pattern
GET !== GET + POST
SameSite Cookie
避免用户信息被携带
限制的是:
① Cookie domain
② 页面域名
依赖Cookie的第三方怎么办?
Set-Cookie: SameSite=None; Secure;
SameSite VS CORS
SameSite:
-
Cookie发送
-
domain vs页面域名
-
“我跟你说个事儿,出这屋我可就不认了"
CORS:
- 资源读写(HTTP请求)
- 资源域名vs页面域名
- 白名单
防御CSRF的正确姿势
Injection 防御
- 找到项目中查询SQL的地方
- 使用prepared statement
Injection beyond SQL
- 最小权限原则
- sudo|| root
- 建立允许名单+过滤
- rm
- 对URL类型参数进行协议、域名、ip等限制
- 访问内网
DoS防御
针对Regex DoS
-
Code Review (❌ /(ab*)+/)
-
代码扫描+正则性能测试
-
❌用户提供的使用正则
针对Logical DoS
- 不是非黑即白
- 有些case,只有在请求量大到一定之后,才会体现
- 分析代码中的性能瓶颈
- 同步调用
- 串行逻辑 -->缓存?
- CPU密集型操作
- 限流
针对DDoS
- 流量治理
- 负载均衡
- API网关
- CDN
- 快速自动扩容
- 非核心服务降级
传输层--防御中间人
HTTPS的一些特性
- 可靠性:加密
- 完整性:MAC验证
- 不可依赖性:数字签名