# 网络安全

## 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. 对称加密和非对称加密有什么区别

### 对称加密

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

### 非对称加密

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://gists.lanlance.cn/cs/sc.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
