Web 开发的安全之旅 | 青训营笔记
这是我参与 第四届青训营 笔记创作活动的第8天
课程的重点内容
1.攻击
2.防御
3.其他
4.总结
两个角度看安全 “攻击”、“防御”
一、攻击
1、XSS(Cross-Site Scripting)注入攻击
- 原理:利用了开发者盲目信任用户的内容,直接转化成dom-
- 类型:
- Stored XSS
- 恶意脚本被存在数据库中
- 访问页面读数据时会被恶意脚本攻击
- 危害大,对全用户可见
- Reflected XSS
- 不涉及数据库
- 从URL上攻击
- Stored XSS
下图构造的参数就能对图中的代码进行XSS攻击
- DOM-based XSS
- 不需要服务器的参与
- 恶意攻击的发起和执行都在浏览器进行
- Mutation-based XSS
- 利用了浏览器DOM的特性(独特优化)
- 不同浏览器,会有区别(按浏览器进行攻击)
2、CSRF(Cross-site request forgery)跨站伪造请求攻击
- 特征
- 在用户不知情的前提下
- 利用用户权限(cookie)
- 构造指定HTTP请求,窃取或修改用户敏感信息
- 例子
恶意页面使用用户的cookie请求去在后台访问银行转账的接口,并进行了操作
- 代码示例
(以后再不要乱点链接哦)
3、Injection 注入攻击
- SQL Injection(SQL注入攻击)
- 攻击过程
- 例子
-
后端demo
-
前端demo
-
- 攻击过程
(any;DROP TABLE table被后端接收后拼接成SQL语句运行)成功被动删库跑路!!!
- 其他注入攻击
4、DoS(Denial of Service)服务拒绝攻击
通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多的请求,导致请求挤压,进而触发雪崩效应
- ReDoS 基于正则表达式的DoS攻击
- 利用正则表达式的贪婪性
“abababababababbaba”不符合规则的字符串,使得算法一直再计算,响应时间变长
- logic DoS
- DDoS(Distributed DoS)分布式服务拒绝攻击 使用僵尸机器,大量访问服务器,但不回应,导致服务器一直处于半连接状态(TCP3次握手通信原理)
5、以上都是应用层的攻击,关于传输层的攻击
- 中间人攻击(处于客户端和服务端中间,将信息截取、篡改、发送)
二、防御
1、防御XSS
- 不要将用户内容直接转化成DOM(永远不要相信用户的提交内容)
- 防御工具
- 检查svg等可以隐藏恶意脚本的文件
- 允许跨域请求的设置(防止非同源或非允许跨域的地址进行脚本执行)
- CSP
2、CSRF的防御
- 增加辨识能力
- 用户绑定,使用token(注意token一定要设置合适的过期时间,否则一旦被攻击成功,攻击者就一劳永逸了)
- 代码开发时一定要遵守开发规则(get不能用于开发post请求)
- SameSite cookie (cookie中含有domain信息,如果使用者跟domain中不符合,就验证失败)
- 与CORS的对比
3、Injection 注入防御
- 使用prepare statement (SQL 注入)
- 严格审核、过滤敏感信息(其他注入攻击)
4、防御DoS攻击
- Regex Dos
- 代码走查,减少低性能正则表达式
- 代码扫描+正则性能测试
- 不要使用用户提供的正则
- logic DoS
- 分析代码逻辑(需要考虑性能开销较大时的情况)
- DDoS
- 或者实现一些算法,将服务器处于被攻击状态的占用端口回收
5、防御中间人
- https
- 静态资源被劫持(SRI (Subresource Integrity)):对比hash值进行验证静态资源是否被攻击
三、总结
本节内容主要介绍了关于Web中常见的攻击方式和防御措施,安全无小事,作为开发者既要遵循开发规则,也要注意发现安全问题,毕竟事关饭碗啊。
知识很多,时间有限。了解了本质才能更容易找到学习的方向。
下篇笔记:前端必须知道的开发调试知识
基础不牢,地动山摇
TO BE CONTINUED