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: trueFile (YAML)
yaml
# 在请求路径中允许编码斜杠
http:
middlewares:
test-encodedchars:
encodedCharacters:
allowEncodedSlash: trueFile (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 的商业支持。