Web开发的安全之旅|青训营笔记
这是我参与「第四届青训营 」笔记创作活动的第6天
关注开发安全的意义
随着技术的不断更新迭代,用户的网上隐私问题,公司的财产安全问题,都成为了至关重要的问题。一份产品的好坏不单止用户体验要好,更重要是使用的对象要用的安全,所以开发的安全性问题十分重要。本文着重讲述Web开发的安全问题,一方面从黑客攻击角度讲述Web攻击方面问题,一方面从白客防御角度来讲述Web防范攻击方面问题。
攻击篇
- XSS(cross-Site Scripting 跨站脚本攻击)
- CSRF(cross-Site request forgery 跨站请求伪造)
- SQL注入(SQL Injection)
- SSRF(Server-Side Request Forgery 网络服务器端请求伪造)
- DoS(Denial of Service 拒绝服务)
- 中间人攻击
XSS
攻击原理
浏览器盲目信任用户提交的内容,用户提交的字符串解析为Js代码(也用可能是html代码)处理,从而造成攻击者的目的达成。
XSS的特点
- 通常难以从UI上感知(暗地执行脚本)
- 窃取用户信息(cookie/token)
- 绘制UI(例如弹窗),诱骗用户(点击/填写)表单
XSS demo
图中提交的内容中包括JS脚本,当拿到数据时浏览器会解析JS脚本从而执行,alert了‘XSS’
stroed XSS
- 恶意脚本被存在数据中
- 访问页面➡️读数据⩶被攻击
- 危害最大,对全部用户可见
Reflected XSS
- 不涉及数据库
- 从URL上攻击
把恶意脚本写到URL的param参数上从而提交到代码中,然后浏览器解析脚本从而执行恶意脚本
DOM-based XSS
- 不需要服务器的参与
- 恶意攻击的发起+执行,全在浏览器完成
直接声明一个新的内容,然后通过innerHtml等api将恶意脚本插入div等,再插入DOM树,全部在浏览器完成
Reflected 和 DOM-based的不同
Reflected XSS会通过服务器,而DOM-based XSS完全通过浏览器完成
Mutation-based XSS
- 利用了浏览器渲染DOM的特性(独特优化)
- 不同浏览器,会有区别(按浏览器进行攻击)
图中就利用了tile属性在不同浏览器,不同的环境解析得到了三个不同的结果。从而发起对特有浏览器的攻击。
CSRF
- 在用户不知情的前提下
- 利用用户权限(cookie)
- 构造指定HTTP请求,窃取或修改用户敏感信息
SQL Injection
SQL Injection demo
- 读取请求字段
- 直接以字符串的形式拼接SQL语句
其他Injection
- CLI
- OS command
- Server-Side Request Forgery (SSRF),服务端伪造请求
- 严格来说,SSRF不是injection,但是原理了类似
SSRF demo
- 请求【用户自定义】的callback URL
- web server 通常有内网访问权限
Dos
通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。
ReDos(基于正则表达式的Dos)
Logical Dos
- 耗时的同步操作
- 数据库写入
- SQL join
- 文件备份
- 循环执行逻辑
Distributed Dos(DDoS)
短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求
- 直接访问IP
- 任意API
- 消耗大量带宽(耗尽)
中间人攻击
- 明文传输
- 信息篡改不可知
- 对方身份未验证
防御篇
XSS防御
- 永远不信任用户的提交内容
- 不要将用户提交的内容直接转换成DOM
XSS防御工具
必须生成DOM的几个做法
- 利用new DOM parser()
- 上传svg
- Blob动态生成script
- 自定义跳转链接
- 自定义样式
CSP(Content Security Policy)
- 哪些源(域名)被认为是安全的
- 来自安全源的脚本可以执行,否则直接抛错
- 对eval-inline script直接拒绝
CSPF防御
CSRF--token
先有页面,后有请求
- 用户绑定:攻击者也可以是注册用户===可以获取自己的token
- 过期时间:【前向保密】
CSRF--iframe攻击
SameSite Cookie
SameSite和CORS的对比
Injecttion beyond SQL
Regex DoS
Logical DoS
DDoS
防御中间人
总结
- 安全无小事
- 使用的依赖(npm package,甚至是Node JS)可能成为最薄弱的一环
- 保持学习的心态,是技术就会有漏洞,要不断地补漏洞,不断地作优化。