> For the complete documentation index, see [llms.txt](https://1425816423.gitbook.io/my-knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://1425816423.gitbook.io/my-knowledge-base/qian-duan-an-quan-yu-xing-neng-you-hua/qian-duan-an-quan/yue-quan-gong-ji-yu-jwt.md).

# 越权攻击与JWT

tags: 前端安全 Created time: July 11, 2022 7:38 PM emoji: 🤺

## 越权攻击

所谓的越权攻击是指低权限绕开限制访问到高权限的数据，从而导致敏感信息泄漏。

预防越权攻击不能仅仅依靠前端，例如只靠前端隐藏某个敏感操作的按钮，隐藏某个高权限的页面等，因为这样攻击者可以通过浏览器开发者工具或其他攻击工具来绕开前端的限制，直接访问后端接口，因此预防越权攻击需要后端做出响应的预防处理。

## JWT

预防越权攻击需要后端在敏感操作的接口里辨别用户的身份，如果用户无权限则不允许其访问。辨别用户的身份方式有很多，这里介绍一种比较常用的方法JWT。

JWT全程JSON WITH TOKEN，是一种开放标准，旨在可被信任地、可被校验地、安全地在各方传递信息。J**WT最常见的场景是授权**。

### 组成

JWT由三部分拼接构成:头部(base64)、负载(base64)和签名，各部分用英文`.` 分隔。

1. 头部
2. 负载
3. 签名

**头部**

头部通常由token类型(JWT)和算法名称构成。

```jsx
{
    'alg': "HS256",
    'typ': "JWT"
}
```

**负载**

第二部分负载就是我们需要传递的信息主体。

通常包含以下信息(非必须)：

* 授权人
* 被授权人
* 过期时间
* 授权时间
* …
* 自定义字段

**如果需要在负载部分存放敏感信息，需要对其进行加密。**

**签名**

第三部分是签名，签名是结合前两部分(base64后)和密钥(存放到服务器)，使用头部声明的算法生成的。签名的作用主要是防止token被篡改，服务器接收token后，会使用密钥对该token进行校验，判断token是否被篡改以及token的有效性。

**JWT的密钥一般存放在服务器，假如被泄漏，那么攻击者就可以伪造token，从而绕开防护措施。**

### 使用

JWT token通常放到http请求头的`Authorization` 字段中，并在前面加上`Bearer` 标识(Bearer验证)

```jsx
'Authorization': "Bearer " + token
```

JWT不仅仅用于防止越权攻击，也可以用于防御跨站点请求伪造攻击。

可以在此网站中体验JWT [JSON Web Tokens - jwt.io](https://jwt.io/)
