【发布时间】:2022-01-25 18:37:16
【问题描述】:
我刚刚收到来自 Sentry 的警报,来自我在生产中运行的应用程序,这似乎是恶意请求造成的。
我已经设法在本地环境中重新创建错误:
(Plug.Router.MalformedURIError) malformed URI "/cgi-bin/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/bin/sh"
(elixir 1.12.1) lib/uri.ex:419: URI.decode/1
(elixir 1.12.1) lib/enum.ex:1553: Enum."-map/2-lists^map/1-0-"/2
(elixir 1.12.1) lib/enum.ex:1553: Enum."-map/2-lists^map/1-0-"/2
(plug 1.12.1) lib/plug/router/utils.ex:18: Plug.Router.Utils.decode_path_info!/1
(matchhaus 0.0.1) lib/plug/router.ex:268: MyApp.Cors.match/2
...continues
可以看出,请求中的URL路径为/cgi-bin/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/bin/sh。这看起来像是尝试对 URI 字符串进行双重编码以遍历目录结构 (%%32%65%%32%65 -> %2e%2e -> ..)。然而,这似乎在 URI.decode 阶段失败了,这是有道理的,因为像 %%32 这样的东西是无效的。
我的问题是我宁愿我的服务器没有从这样的事情中抛出错误。理想情况下,它会处理此问题并以 404 或 400(或其他 4xx 状态)响应,因为这是一个无效请求。
这是Plug 应该处理的事情吗?或者这是我应该在我的 Phoenix 应用程序中处理的事情?
【问题讨论】:
-
好像是intentionally raising。您使用的是什么版本的 Elixir?
-
我使用的是 1.12.1。
URI.decode是否有 1.13 更新日志的链接?
标签: elixir uri phoenix-framework plug