这是我参与「第五届青训营」伴学笔记创作活动的第13天
一、XSS的防御
1.原则
- 永远不信任用户的提交内容
- 不要将用户提交的内容直接转换成DOM
2.现成工具
- 前端
- 主流框架默认防御XSS
- google-closure-library
- 服务端(Node)
- DOMPurify
3.动态生成DOM要小心
- string->DOM
- 上传svg
- Blob动态生成script
- 自定义跳转链接
- 自定义样式
4.Content Security Policy(CSP)
- 哪些源(域名)被认为是安全的
- 来自安全源的脚本可以执行,否则直接抛错
- 对eval+inline script说NO!
- 服务器的响应头部
- 浏览器meta
二、CSRF的防御
除了Origin+Referrer,其他判断【请求来自于合法来源】的方式
用户绑定:攻击者也可以是注册用户===可以获取自己的token
过期时间: 【前向保密】
- SameSite Cookie
- 我的Cookie只能为我所用
- 限制条件:Cookie domain的属性是否和当前页面域名匹配
- 第一方Cookie(√),第三方Cookie(×)
- 限制的是Cookie domain/页面域名
三、防御Injection
- 找到项目中查询SQL的地方
- 使用prepared statement
- 最小权限原则
- sudo || root
- 建立允许名单+过渡
- rm
- 对URL类型参数进行协议、域名、ip等限制
- 访问内网
四、防御DoS
-
Regex DoS
-
Logical DoS
- 不是非黑即白
- 有些case,只有在请求量大到一定之后,才会体现
- 分析代码中的性能瓶颈
- 同步调用
- 串行逻辑
- CPU密集型操作
- 限流
- 不是非黑即白
-
DDoS
- 流量治理
- 负载均衡
- API网关
- CDN
- 快速自动扩容
- 非核心服务降级
- 流量治理
五、防御中间人
HTTPS的一些特性
- 可靠性:加密
- 完整性:MAC验证
- 不可抵赖性:数字签名
六、课后总结
本章节从防御者的角度上学习了Web开发安全的相关知识,Web开发安全非常重要,安全无小事,但使用的依赖(npm package,甚至是NodeJS)可能成为最薄弱的一环,需要不断保持学习的心态,冷静分析应对应对Web安全漏洞。