这是我参与「第五届青训营」伴学笔记创作活动的第 9 天
本堂课重点内容
本堂课分别从攻击者和防御者两个角色出发,讲解了Web开发时存在的安全问题和防范措施,本篇文章主要记录了Web开发的攻击技术。
Web开发安全——攻击篇
- Cross-Site Scripting(XSS)
- 跨站脚本攻击:在Web页面中,攻击者恶意注入script代码,在用户访问该页面时,这些恶意脚本就会被执行,达到攻击用户的目的,可能会造成用户隐私泄露或者用户被当成“挖矿”的机器。
- XSS主要利用
- 开发者盲目信任用户提交的内容;
- 前端工程师直接把用户提交的字符串转换成DOM
- XSS特点
- 难以从UI上感知(暗地执行脚本)
- 窃取用户信息,如cookie、token
- 执行JS,绘制UI(如弹窗),诱骗用户去点击和访问
- XSS类型
- 存储型:把恶意脚本存在数据库里面,当用户访问页面时,就会去读取database中的数据,从而攻击用户;这是危害最大、对所有用户可见的恶意攻击
- 反射型:reflected,不涉及数据库,完全从URL攻击
如:
host/path/?param=<script>alert('123')</script>,在服务端注入脚本 - 基于DOM的:无需服务器参与,“注入+攻击”由浏览器完成
- 基于Mutation的:利用浏览器渲染DOM的特性,不同浏览器有所差异,非常巧妙、最难防御的攻击
- Cross-site request forgery(CSRF)
- 跨站点请求伪造:攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或者设定信息等的状态更新
- CSRF特点
- 用户不知情
- 利用用户权限(cookie、token等)构造http请求
- 窃取或修改用户信息
- 最常见的就是GET请求
- Injection
- 最常见的是SQL注入攻击:在进行http请求时,恶意注入一段sql参数,服务器端将参数构造成SQL语句并运行SQL代码,代码被执行后就实现了SQL的恶意注入,可以用来获取、修改、删除数据
- 另外的注入攻击还有:CLI、OS command,以及原理相似的Server-Side Request Fprgery(SSRF,服务器端请求伪造)
- 删除
- 读取、修改,通过把自己的网站代理转换成另一个第三方网站,把流量牵引过去,如果第三方承受不住就会导致服务器over,竞争对手GAMEOVER
- SSRF:访问callback,暴露内网信息
- Denial of Service(DoS)
- 服务拒绝,攻击者通过构造特殊请求,大量消耗服务器资源,使得更多请求无法响应,造成请求积压,引发雪崩效应
- 回顾一下:正则表达式的贪婪模式
- 满足“一个”或者“多个”:使用“?”满足一个即可,不用“?”有多少来多少
- 类型
- ReDoS:基于正则表达式的DoS,不断回溯
- Distributed DoS(DDoS):最常见的,在短时间内使用大量僵尸设备请求流量,使得服务器不能及时完成所以请求,造成请求堆积引发“雪崩”,无法响应新请求
- 特点
- 不会限制在域名的访问,更多的是直接访问IP
- 目的:耗尽带宽,eg:三次握手
- 耗时的同步操作、数据库写入、文件备份、循环执行逻辑
- 中间人攻击
- 基于传输层的攻击方式,在浏览器和服务器之间插一个中间人来窃取、修改信息,进行网络请求
- 中间人攻击利用:明文传输、信息篡改不可知、对方身份未验证
个人总结
学习完本节课后,心里所想便是“只有想不到的,没有做不到的”。恶意的攻击不仅会损失用户的利益,还会破坏项目的稳定性,造成无法想象的后果。所以,为了保住自己的“饭碗”,开发者们要时刻小心啊>-<。