This is an automated email from the ASF dual-hosted git repository.
juzhiyuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix.git
The following commit(s) were added to refs/heads/master by this push:
new d38d19984 docs: improve CSRF plugin's documentation (#7519)
d38d19984 is described below
commit d38d19984c249f51648620ed3f41d4b10631e505
Author: Yuedong Wu <[email protected]>
AuthorDate: Fri Jul 29 09:03:36 2022 +0800
docs: improve CSRF plugin's documentation (#7519)
---
docs/en/latest/plugins/csrf.md | 2 +-
docs/zh/latest/plugins/csrf.md | 61 +++++++++++++++++++++++++-----------------
2 files changed, 38 insertions(+), 25 deletions(-)
diff --git a/docs/en/latest/plugins/csrf.md b/docs/en/latest/plugins/csrf.md
index 3285f5121..bb963d187 100644
--- a/docs/en/latest/plugins/csrf.md
+++ b/docs/en/latest/plugins/csrf.md
@@ -5,7 +5,7 @@ keywords:
- Plugin
- Cross-site request forgery
- csrf
-description: This document contains information about the Apache APISIX csrf
Plugin.
+description: The CSRF Plugin can be used to protect your API against CSRF
attacks using the Double Submit Cookie method.
---
<!--
diff --git a/docs/zh/latest/plugins/csrf.md b/docs/zh/latest/plugins/csrf.md
index 00fff4d61..6dd5c4eaf 100644
--- a/docs/zh/latest/plugins/csrf.md
+++ b/docs/zh/latest/plugins/csrf.md
@@ -1,5 +1,13 @@
---
title: csrf
+keywords:
+ - APISIX
+ - API 网关
+ - 跨站请求伪造攻击
+ - Cross-site request forgery
+ - csrf
+description: CSRF 插件基于 Double Submit Cookie 的方式,帮助用户阻止跨站请求伪造攻击。
+
---
<!--
@@ -23,23 +31,21 @@ title: csrf
## 描述
-`CSRF` 插件基于 [`Double Submit
Cookie`](https://en.wikipedia.org/wiki/Cross-site_request_forgery#Double_Submit_Cookie)
的方式,保护您的 API 免于 CSRF 攻击。本插件认为 `GET`、`HEAD` 和 `OPTIONS` 方法是安全操作。因此 `GET`、`HEAD`
和 `OPTIONS` 方法的调用不会被检查拦截。
+`csrf` 插件基于 [`Double Submit
Cookie`](https://en.wikipedia.org/wiki/Cross-site_request_forgery#Double_Submit_Cookie)
的方式,保护用户的 API 免于 CSRF 攻击。
-在这里我们定义 `GET`, `HEAD` 和 `OPTIONS` 为 `safe-methods`,其他的请求方法为 `unsafe-methods`。
+在此插件运行时,`GET`、`HEAD` 和 `OPTIONS` 会被定义为 `safe-methods`,其他的请求方法则定义为
`unsafe-methods`。因此 `GET`、`HEAD` 和 `OPTIONS` 方法的调用不会被检查拦截。
## 属性
-| Name | Type | Requirement | Default | Valid | Description
|
+| 名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 |
| ---------------- | ------- | ----------- | ------- | -----
|---------------------|
-| name | string | optional | `apisix-csrf-token` | | 生成的 Cookie
中的 token 的名字,需要使用这个名字在请求头携带 Cookie 中的内容 |
-| expires | number | optional | `7200` | | CSRF Cookie 的过期时间(秒)|
-| key | string | required | | | 加密 token 的秘钥 |
-
-**注意:当 expires 设置为 0 时插件将忽略检查 Token 是否过期**
+| name | string | 否 | `apisix-csrf-token` | | 生成的 Cookie 中的 Token
名称,需要使用此名称在请求头携带 Cookie 中的内容。 |
+| expires | number | 否 | `7200` | | CSRF Cookie 的过期时间,单位为秒。当设置为 `0` 时,会忽略 CSRF
Cookie 过期时间检查。|
+| key | string | 是 | | | 加密 Token 的密钥。 |
-## 如何启用
+## 启用插件
-1. 创建一条路由并启用该插件。
+以下示例展示了如何在指定路由上启用并配置 `csrf` 插件:
```shell
curl -i http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY:
edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
@@ -59,38 +65,47 @@ curl -i http://127.0.0.1:9080/apisix/admin/routes/1 -H
'X-API-KEY: edd1c9f034335
}'
```
-这条路由已经开启保护,当你使用 GET 之外的方法访问,请求会被拦截并返回 401 状态码。
+当你使用 `GET` 之外的方法访问被保护的路由时,请求会被拦截并返回 `401` HTTP 状态码。
+
+使用 `GET` 请求 `/hello` 时,在响应中会有一个携带了加密 Token 的 Cookie。Token 字段名称为插件配置中的 `name`
值,默认为 `apisix-csrf-token`。
+
+:::note
-2. 使用 `GET` 请求 `/hello`,在响应中会有一个携带了加密 `token` 的 `Cookie`。Token 字段的名字为插件配置中的
`name` 值,如果没有配置该值,那么默认值为 `apisix-csrf-token`。
+每一个请求都会返回一个新的 Cookie。
-注意:每一个请求都会返回一个新的 Cookie。
+:::
-3. 在后续的对该路由的 `unsafe-methods` 请求中,需要从 Cookie 中读取加密的 token,保证携带 Cookie
并在请求头部中携带该 token,请求头字段的名称为插件配置中的 `name`。
+在后续对该路由进行的 `unsafe-methods` 请求中,需要从 Cookie 中读取加密的 Token,并在请求头中携带该
Token。请求头字段的名称为插件属性中的 `name`。
## 测试插件
-直接对该路由发起 `POST` 请求会返回错误:
+启用插件后,使用 `curl` 命令尝试直接对该路由发起 `POST` 请求,会返回 `Unauthorized` 字样的报错提示:
```shell
curl -i http://127.0.0.1:9080/hello -X POST
+```
+```shell
HTTP/1.1 401 Unauthorized
...
{"error_msg":"no csrf token in headers"}
```
-当使用 GET 请求,返回中会有携带 token 的 Cookie:
+当发起 `GET` 请求时,返回结果中会有携带 Token 的 Cookie:
```shell
curl -i http://127.0.0.1:9080/hello
+```
+```
HTTP/1.1 200 OK
+...
Set-Cookie:
apisix-csrf-token=eyJyYW5kb20iOjAuNjg4OTcyMzA4ODM1NDMsImV4cGlyZXMiOjcyMDAsInNpZ24iOiJcL09uZEF4WUZDZGYwSnBiNDlKREtnbzVoYkJjbzhkS0JRZXVDQm44MG9ldz0ifQ==;path=/;Expires=Mon,
13-Dec-21 09:33:55 GMT
```
-在请求之前,需要从 Cookie 中读取 token,并在随后的 `unsafe-methods` 请求中的请求头中携带。
+在请求之前,用户需要从 Cookie 中读取 Token,并在后续的 `unsafe-methods` 请求的请求头中携带。
-例如,在客户端使用 [js-cookie](https://github.com/js-cookie/js-cookie) 读取 Cookie,使用
[axios](https://github.com/axios/axios) 发送请求。
+例如,你可以在客户端使用 [js-cookie](https://github.com/js-cookie/js-cookie) 读取 Cookie,使用
[axios](https://github.com/axios/axios) 发送请求:
```js
const token = Cookie.get('apisix-csrf-token');
@@ -100,19 +115,19 @@ const instance = axios.create({
});
```
-你还需要确保你的请求携带了 Cookie。
-
-使用 curl 发送请求:
+使用 `curl` 命令发送请求,确保请求中携带了 Cookie 信息,如果返回 `200` HTTP 状态码则表示请求成功:
```shell
curl -i http://127.0.0.1:9080/hello -X POST -H 'apisix-csrf-token:
eyJyYW5kb20iOjAuNjg4OTcyMzA4ODM1NDMsImV4cGlyZXMiOjcyMDAsInNpZ24iOiJcL09uZEF4WUZDZGYwSnBiNDlKREtnbzVoYkJjbzhkS0JRZXVDQm44MG9ldz0ifQ=='
-b
'apisix-csrf-token=eyJyYW5kb20iOjAuNjg4OTcyMzA4ODM1NDMsImV4cGlyZXMiOjcyMDAsInNpZ24iOiJcL09uZEF4WUZDZGYwSnBiNDlKREtnbzVoYkJjbzhkS0JRZXVDQm44MG9ldz0ifQ=='
+```
+```shell
HTTP/1.1 200 OK
```
## 禁用插件
-发送一个更新路由的请求,以停用该插件:
+当你需要禁用该插件时,可以通过以下命令删除相应的 JSON 配置,APISIX 将会自动重新加载相关配置,无需重启服务:
```shell
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY:
edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
@@ -126,5 +141,3 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H
'X-API-KEY: edd1c9f034335f13
}
}'
```
-
-CSRF 插件已经被停用。