Web开发安全之旅(防御篇)
这是我参与第五届青训营 伴学笔记创作活动的第14天。
课程重点
- XXS的防御
- 防御CSRF的正确知识
- 防御Injection
- 防御Dos
- 防御中间人
详细知识点
XXS的防御
永远不要相信用户直接提交的内容,不要将用户提交的内容直接转成DOM,而是作为string字符串。
现成工具
- 前端:主流框架(如:react和vue)都默认防御XSS; google-closure-library也提供了防XSS的各种api工具。
- 后端:DomPurify
如果必须要将string->DOM,则可以用new DOMParse()进行转义。 要注意以下几点可能产生XSS的情况:
- 上传SVG
- Blob动态生成Script
- 自定义跳转链接
- 自定义样式
CSRF的防御
- if 伪造请求===异常来源
- then 限制请求来源 ->限制伪造请求
- Origin 同源请求中,GET + HEAD不发送
- Referer
除了Origin + Referrer,其它判断请求来自合法来源 的方式: if(请求来自合法页面) then(服务器接收过页面请求) then(服务器可以标识)
token防御CSRF
iframe攻击
SameSite Cookie:避免用户信息被携带,当前页面域下的cookie只能为当前页可用
SameSite vs CORS
SameSite
- Cookie发送
- domain vs 页面域名
- “我跟你说个事,出这屋我可就不认了”
CORS
- 资源读写(HTTP请求)
- 资源域名vs页面域名
- 白名单
防御Injection
防止SQL注入:
- 找到项目中查询SQL的地方,使用prepared statement
- 最小权限原则:sudo || root
- 建立允许名单+过滤:rm
- 对URL类型参数进行协议、域名、ip等限制:访问内网
防御Dos
- Regex Dos:代码扫描+正则性能测试,不使用用户提供的正则
- Logical Dos:分析代码中的性能瓶颈,限流
- DDoS:流量治理(负载均衡,API网关,CDN);快速自动扩容;非核心服务降级。
防御中间人
采用Https加密传输协议