> For the complete documentation index, see [llms.txt](https://gists.lanlance.cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://gists.lanlance.cn/cs/sc.md).

# 网络安全

## 1. 什么是 JWT？主要用来做什么？

JWT：Json Web Token，是基于 Json 的一个公开规范，这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息，他的两大使用场景是：认证和数据交换

## 2. JWT 由几部分组成？分别是什么？

一个 JWT 实际上就是一个字符串，它由三部分组成：头部、载荷与签名

## 3. JWT 校验 token 时，怎么保证数据并没有被黑客拦截并篡改？

signature 中有私钥来进行签名，可以保证安全性

## 4. Session + Cookie 实现

1. 客户端登录成功后，服务器会给每一台主机分配一个唯一的 session\_id，用来区分他们，除了存入服务器的缓存，数据库或者内存中，还会把这个 session\_id 返回给相应的客户端
2. 客户端收到 session\_id 后会存入 cookie 中，以后每一次发送其他类型的请求的操作都会携带这个 session\_id
3. 服务器会将客户端发来的这个 session\_id 和服务端查到的 session\_id 进行对比，如果匹配，则返回给对应主机所需要的资源，否则拒绝

缺点

1. 因为服务器缓存 session\_id，需要定期清理 session\_id 表
2. 不能识别跨域请求
3. 在分布式 (即多台服务器) 的环境下，还得做 session 同步，一般不推荐，

## 5. JWT 的缺陷

1. 不安全的加密算法 JWT 给开发者提供了很多的加密算法选择，其中就包括了已知的易受攻击的算法
2. 在 header 中包含了签名算法的种类 攻击者只需要将 header 中的 alg 字段设置为 none 就可以绕过签名验证过程，在知道服务器使用非对称加密算法的情况下，修改 alg 为一个对称加密算法

## 6. Paseto 相比 JWT 的改变

* 不会向用户开放所有的加密算法
* header 中不再含有 alg 字段，也不会有 none 算法
* payload 使用加密算法，而不是简单的编码

## 7. CSRF 攻击

攻击者诱导受害者进入第三方网站，在第三方网站中，向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证，绕过后台的用户验证，达到冒充用户对被攻击的网站执行某项操作的目的。

## 8. 防御 CSRF 攻击

前面讲到 CSRF 的一个特征是，攻击者无法直接窃取到用户的信息（Cookie，Header，网站内容等），仅仅是冒用 Cookie 中的信息。

而 CSRF 攻击之所以能够成功，是因为服务器误把攻击者发送的请求当成了用户自己的请求。那么我们可以要求所有的用户请求都携带一个 CSRF 攻击者无法获取到的 Token。服务器通过校验请求是否携带正确的 Token，来把正常的请求和攻击的请求区分开，也可以防范 CSRF 的攻击。

## 9. XSS CSRF SSRF 区别以及防范

1. XSS（跨站脚本攻击）：
   * 原理：攻击者通过在网页中插入恶意脚本，使用户在浏览器中执行该脚本，从而获取用户的敏感信息或进行其他恶意操作。
   * 防御方式：对用户输入进行过滤和转义、使用 HTTP Only 属性禁止 JavaScript 读取 Cookie 值、输入时校验、浏览器与 Web 应用端采用相同的字符编码等。
2. CSRF（跨站请求伪造）：
   * 原理：攻击者利用用户已登录的身份，通过伪造请求发送到受信任的网站，使用户在不知情的情况下执行恶意操作。
   * 防御方式：使用随机化的 CSRF 令牌来验证请求的合法性。
3. SSRF（服务器端请求伪造）：
   * 原理：攻击者通过构造恶意请求，使服务器发起对内部资源的请求，从而获取敏感信息或攻击内部系统。
   * 防御方式：限制协议为 HTTPS、限制 URL 白名单、限制内网 IP 等。

## 10. SSL 加密算法

### 对称加密算法

* **DES**：DES 是最早被推出的加密算法之一,但由于密钥长度短,容易被暴力破解,已于 2005 年被弃用。
* **3DES**：3DES 是 DES 算法的升级版,通过三次加密提高了安全性,但也存在严重安全漏洞,预计 2023 年后将被废弃。
* **AES**：AES 是 DES 的替代方案,是目前使用最广泛的对称加密算法之一。AES 密钥长度为 128、192 或 256 位,安全性高,广泛用于金融、在线交易等领域。

### 非对称加密算法

* **RSA**：RSA 是 1977 年发明的非对称加密算法,是目前使用最广泛的公钥算法。其安全性建立在素数分解的困难性上,即使用超级计算机也很难破解。
* **ECC**：ECC 又称椭圆曲线加密算法,相比 RSA 可以使用更短的密钥实现更高的安全性。160 位 ECC 加密安全性相当于 1024 位 RSA。

SSL 握手过程中,客户端和服务器通过非对称加密算法协商对称加密算法的密钥,然后使用对称加密算法加密传输的数据。这样既保证了密钥交换的安全性,又提高了数据加密的效率。

## 11. 对称加密和非对称加密有什么区别

### 对称加密

对称加密使用相同的密钥进行数据的加密和解密。发送方和接收方必须在通信前共享这个密钥。

### 非对称加密

非对称加密使用一对密钥，即公钥和私钥。公钥可以公开，而私钥必须保密。
