Web开发的安全问题
这是我参与「第四届青训营 」笔记创作活动的的第8天
1.重点内容
在网络安全逐渐被人们重视的现在,网络安全始终是开发者需要解决的事情。今天从攻击和防御两个方面来详细了解一下Web开发中会出现的安全问题。
2.重要的知识点
- 常见攻击手段
- 常见防御手段
3.详尽的知识点
常见的攻击手段
XSS攻击
- 难以从UI上感知
- 窃取用户信息
- 绘制UI,诱骗用户点击
XSS攻击的分类
-
Stored XSS
- 恶意脚本存在数据库中
- 访问页面的所有用户都会被攻击
- 危害极大
-
Reflected XSS
- 不涉及数据库
- 从URL上攻击
-
DOM-based XSS
- 不需要服务器参与
- 恶意攻击的发起和执行全都在浏览器完成
-
Mutation-based XSS
- 利用浏览器渲染DOM的特性
- 按浏览器区别攻击
CSRF(Cross-site request forgery)攻击
- 攻击时用户不知情
- 利用用户权限,如cookies
- 构造指定的HTTP请求,窃取或修改用户的敏感信息
Injection
- SQL Injection
- CLI
- OS command
- Server-Side Request Forgery
DoS(Denial of Service)
-
ReDoS
- 基于正则表达式的贪婪匹配
-
DDoS
- 短时间来自大量僵尸设备的流量请求
中间人攻击
- 明文传输
- 无法知道信息是否被篡改
- 对方的身份无法被验证
常见防御手段
XSS
-
永远不信任用户的提交内容
-
需要对用户提交的内容进行检查
- 注意转义成DOM时
- 注意上传svg时
- 注意自定义跳转
- 注意自定义样式
CSP(Content Security Policy)
- 声明哪些域名时安全的
- 对安全源脚本直接执行,否则直接抛错
- 禁止使用eval+inline script
CSRF的防御
对请求执行判断,判断是否为异常来源
- 对于一般的CSRF攻击,可以使用定期更改的token来确认是否为伪造请求
- 对于iframe攻击,设置
X-Frame-Options为DENY/SAMEORIGIN可以有效防止 - 将不同的请求方法分开写,防止所有功能杂糅
Injection
- 在项目中找到使用查询SQL的方法
- 使用prepared statement处理
ReDoS
- 减少贪婪匹配的使用
- 进行代码扫描
- 对正则功能进行性能测试
- 不要使用用户提供的正则
DDoS
-
流量治理
- 负载均衡
- API网关
- CDN
-
快速自动扩容
-
非核心服务降级
中间人攻击防御
使用HTTPS协议
- 可靠性加密
- 完整性MAC验证
- 不可抵赖的数字签名
CDN被篡改
通过SRI的对比,防止CDN的内容被篡改
4.课后总结
我们作为开发者,必须重视安全问题,安全问题从来都不是小问题。注意使用的依赖,这些依赖不像开发者自己写的代码那样不容易被篡改,因此对依赖的检查也是重中之重。最重要的一点就时要保持学习的心态,现代前端技术发展的速度非常快,我们也需要时刻保持谦虚,求知的心态去学习。