这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
防御篇
XSS
永远不要相信用户提交的内容,永远不要将用户提交的内容作为DOM
前端:
- 主流框架默认防御XSS(innerHTML)
- google-closure-library 服务端(Node):
- DOMPurify
如果用户有必须上传DOM的需求,可以使用new DOMParser(),对于用户上传的svg,也要对其中内容进行检查(其中可以插入script标签),小心自定义跳转和自定义样式。
CSP(Content Security Policy)
- 哪些源(域名)被认为是安全的
- 来自安全源的脚本可以执行,否则直接抛错
- 对eval+inline script说No
CSRF
CSFR的防御
1.对请求同步的Origin、Refer进行校验
2.token
iframe攻击:iframe中发生的请求是同源请求,可以通过配置X-Frame-Options来防御。
避免用户信息被携带:SameSite Cookie,其他页面不能使用此页面的Cookie(判别根据:页面域名与domain属性是否一致)
SameSite VS Cors
SameSite
- Cookie发送
- domain vs 页面域名
- "我跟你说个事儿,出这屋我可就不认了"
CORS
- 资源读写(HTTP请求)
- 资源域名 vs 页面域名
- 白名单
SameSite demo
Injection
- SQL注入:找到使用SQL的地方,使用
prepared statement。 - 最小权限原则:
sudo||root - 建立允许名单+过滤:
rm - 对URL类型参数进行协议、域名、ip等限制:访问内网
Dos
- ReDos:完善
Code Review。 - 代码扫描 + 正则性能测试
- 拒绝使用用户提供的正则
过滤:
- 流量治理
-
- 负载均衡
抗量:
-
- API网关
-
- CDN
- 快速自动扩容
- 非核心服务降级
传输层————防御中间人
HTTPS:
- 可靠性:加密
- 完整性:MAC验证
- 不可抵赖性:数字签名
HTTPS————完整性
HTTPS————不可抵赖