Skip to content

Traefik EncodedCharacters 中间件文档

EncodedCharacters(编码字符)

EncodedCharacters 中间件控制哪些含糊的保留编码字符允许出现在请求路径中。

使用此中间件时,默认情况下,为了增强安全性,会拒绝潜在危险的编码字符。

配置示例

Docker & Swarm

yaml
# 在请求路径中允许编码斜杠
labels:
  - "traefik.http.middlewares.test-encodedchars.encodedcharacters.allowencodedslash=true"

Kubernetes

yaml
# 在请求路径中允许编码斜杠
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: test-encodedchars
spec:
  encodedCharacters:
    allowEncodedSlash: true

File (YAML)

yaml
# 在请求路径中允许编码斜杠
http:
  middlewares:
    test-encodedchars:
      encodedCharacters:
        allowEncodedSlash: true

File (TOML)

toml
# 在请求路径中允许编码斜杠
[http.middlewares]
  [http.middlewares.test-encodedchars.encodedCharacters]
    allowEncodedSlash = true

配置选项

重要

配置这些选项时,请检查你的后端是否完全符合 RFC 3986。 这有助于避免"分裂视图(split-view)"情况 —— 即 Traefik 和你的后端以不同方式解析同一个 URL。

选项描述默认值必填
allowEncodedSlash允许在请求路径中使用编码斜杠(%2F%2f)。false
allowEncodedBackSlash允许在请求路径中使用编码反斜杠(%5C%5c)。false
allowEncodedSemicolon允许在请求路径中使用编码分号(%3B%3b)。false
allowEncodedPercent允许在请求路径中使用编码百分号(%25)。false
allowEncodedQuestionMark允许在请求路径中使用编码问号(%3F%3f)。false
allowEncodedHash允许在请求路径中使用编码井号(%23)。false

何时使用

默认情况下,Traefik 会拒绝所有这些编码字符。如果你的合法请求需要使用其中的某些字符(例如某些 API 框架会在路径中编码特殊字符),你可以使用此中间件来明确允许它们。

安全警告

允许这些编码字符可能会引入路径注入或绕过认证的风险。请仅在确认后端服务能安全处理它们时启用。


在生产环境使用 Traefik OSS?

如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。

基于 MIT 协议发布