Web 安全一窥
我们先来看2个 Web 安全的例子:
Google 搜索 data leak 数据泄露
Steam 免费充值
其实安全问题“很常见”,任何一个安全问题都有可能危害用户、公司、程序员自身的利益。
常见的Web安全问题及防御措施
一、XSS
跨站脚本攻击,因为缩写和 CSS 重叠,所以只能叫 XSS
。跨站脚本攻击是指攻击者想方设法将非法的非本站点HTML标签或 JavaScript插入网站运行的一种攻击。
特点
- 通常难以从UI上感知(暗地执行脚本)
- 窃取用户信息(cookie/token)
- 绘制UI(例如弹窗),诱骗用户点击/填写表单
分类
1、存储型 XSS
- 恶意脚本被存在数据库中
- 访问页面 -> 读取数据 === 被攻击
- 危害最大,对全部用户可见
2、反射型 XSS
- 不涉及数据库
- 从 URL 上攻击
3、DOM 型 XSS
4、Mutation-based XSS
防御措施
前端:
- 不要将用户提交的内容直接渲染成 DOM 节点
- 使用主流框架, 大部分默认防御XSS
- google-closure-library 服务端(Node):
- 不要相信用户提交的任何数据,对用户上传的DOM属性、style节点、script节点、iframe/frame节点等过滤
- DOMPurify
二、CSRF
跨站请求伪造,是一种常见的Web攻击,它利用用户已登录的身份,在用户毫不知情的情况下,以用户的名义完成非法操作,窃取或修改敏感信息。
案例
Get请求:
Post请求:
防御措施
- Origin+Referer, 只允许同源脚本执行(GET和HEAD请求在头部中不会加入Origin, 需要进行特殊处理)
- 利用token并与用户信息绑定, 严格控制权限, 例如不允许用户A通过调用接口(如传入用户B的id)请求到用户B的数据
- 利用X-Frame-Options, 禁止iframe透穿执行同源请求
- 操作进行读写分离, GET和POST分离
- Same Site Cookie, 禁止Cookie全局携带
- 利用中间件统一处理CSRF攻击, 例如网关鉴证鉴权
三、Inject
Inject,是通过代码注入进行攻击。
分类
1、SQL 注入
2、OS 命令注入
防御措施
- 对用户操作进行权限管控
四、DoS
通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。
分类
1、基于正则的ReDos
2、分布式DDos(Distributed Dos)
短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成 全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。
不搞复杂的,量大就完事儿了
比如SYN Flood,是靠海量的请求完成攻击。
防御措施
对于前端开发人员, 能做的东西很少,基本是运维同学来做。
ReDos防御
DDos防御
五、中间人攻击
中间人攻击是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。
防御措施
防御中间人攻击,则是使用 HTTPS 安全协议(HTTPS = HTTP + TLS)。 为什么 HTTPS 是可靠安全的呢?下面我们就具体来了解下 HTTPS。
HTTPS
HTTPS 特征
- 可靠性:安全加密
- 完整性:MAC 验证
- 不可抵赖性:数字签名
可靠性:安全加密
HTTPS的可靠性是 TLS 来保证的。它是现已弃用的安全套接字层(SSL)的继承者,是一种加密协议,设计用于在计算机网络上提供通信安全性。该协议被广泛应用于电子邮件、即时消息和IP语音等应用程序。
TLS握手分为两个过程,使用非对称密钥加密用于传输对称密钥来保证传输过程的安全性,之后使用对称密钥加密进行通信来保证通信过程的效率。
非对称加密: 浏览器向服务器提供一些加密套件的选项,服务器进行选择采用的套件,并返回一个证书,浏览器接收到证书之后进行校验,如果证书是ok的,就可以用双方协商好的加密算法算出一个sessionKey。
对称加密: 双方利用刚刚生成的sessionKey,对传输的内容进行加解密。
完整性:MAC 验证
不可抵赖性:数字签名
数字签名
签名的执行者拥有私钥和公钥,顾名思义,私钥自己藏好,公钥是公开可见的。 签名的流程,就是用私钥加密内容,拥有公钥的进行签名认证,看是否是对应私钥加密的。
数字证书
数字证书CA:Certificate Authority,是是由电子商务认证中心(以下简称为CA中心)所颁发的一种较为权威与公正的证书。
成也证书,败也证书
当签名算法不够健壮时,签名算法容易被破解,依旧会出现中间人攻击。现阶段,签名算法已经比较健壮,很难破解,所以 HTTPS 保证了不可抵赖性。
总结
- 安全无小事,我们作为开发者一定要对安全问题引起重视,保证公司的财产安全、用户和我们自身的利益。
- 使用的依赖(npm package,甚至是 NodeJS)可能成为最薄弱的一环,因此不要随便引入第三方依赖。
- 攻击方式不断更新,我们要随时保持好的学习心态
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享🎁
😝朋友们如果有需要全套《黑客&网络安全入门&进阶学习资源包》,可以扫描下方二维码免费领取
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
2️⃣视频配套资料&国内外网安书籍、文档
① 文档和书籍资料
② 黑客技术
因篇幅有限,仅展示部分资料
3️⃣网络安全源码合集+工具包
4️⃣网络安全面试题
上述所有资料 ⚡️ ,朋友们如果有需要全套 📦《网络安全入门+进阶学习资源包》,可以扫描下方二维码免费领取 🆓