这是我参与「第四届青训营 」笔记创作活动的的第6天。本节课的主题是【Web 开发的安全之旅】,授课老师为刘宇晨。
本篇笔记分别对课程中所讲的几个要点进行一些解读,如若有误,欢迎大家在评论区交流,指出不当之处。
WEB安全
攻击角度
1.Hacker:
XSS跨站攻击:
原因:不对用户提交的内容过滤
存储型XSS:
- 恶意脚本存在数据库中
- 访问页面→读数据导致攻击
- 危害最大
反射XSS:
- 不涉及数据库
- 从URL上攻击
DOM-based XSS:
- 不需服务器参与
- 恶意攻击发起+执行全在浏览器完成
Mutation-based XSS:
Cross-site request forgery(CSRF):跨站伪造请求
- 用户不知情的情况下利用cookie
- Get/beyond Get
- eg:银行中奖,点击进去获取到cookie
Injection:注入-删除+读取+修改
SQL Injection
CLI
OS command
eg. 读取+修改 nginx page,代理网站请求到另外网站,另外网站流量徒增,抵抗不住攻击,服务下线
Server-Side Request Forgery(SSRF):服务端伪造请求
DOS:
-
ReDOS:基于正则表达式的DOS
传入字符串到含有贪婪匹配模式的服务端
-
DDoS
- 直接攻击IP
- 任意API
- 消耗带宽
eg.洪水攻击
- 中间人攻击
防御角度
XSS:
- 永远不相信用户的提交内容
- 不要直接将提交内容转换成DOM
前端:
- 主流框架防御XSS
后端
- node
怎么对付动态DOM:
- 对string转译
- 检查上传SVG
- 禁止自动跳转
用户自定义样式:
Same-orgin Policy:
- 协议
- 域名
- 端口
HTTP请求:同源👌 跨域✖
Content Security Policy(CSP):
- 识别安全源/域
- 允许安全源脚本执行,否则报错
- 禁止eval+ inline script 标签
在浏览器头部声明标签
防止CSRF:
iframe攻击:
在服务器响应头禁止
防止CSRF:
SameSite Cookie
Injection
SQL:
找到项目中使用SQL的地方,使用prepared statement
Beyond:
- 最小权限原则
- 允许名单+过滤
- URL类型参数限制
DOS
- 代码扫描+正则性能测试
- ✖用户提供的正则
DDos:
流量治理
-
过滤:
- API网关
- 负载均衡
-
抗量:
- CDN
- 自动扩容
- 非核心服务降级
传输层:
使用HTTPS:不可抵赖性
SSL(安全套接层)+HTTP=HTTPS
(TLS是基于SSL3.0开发的协议)
SSL是独立于http的协议,也可用于telnet smtp等。
SSL目前采用:公开密钥加密方式。
共享密钥的难处:密钥可能被窃取
公开密钥:一把公钥一把私钥
https:混合加密机制
因为公钥处理速度慢。
HSTS:将HTTP主动升级到HTTPS
SRI:Subresource Integrity(SRI):防止静态资源被篡改,核实Hash值
使用依赖导致相关安全事件:
left-pad事件
eslint-scope事件
event-stream事件
参考资料