3

我刚刚收到来自 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 应用程序中处理的事情?

4

1 回答 1

0

正如您在异常定义中看到的那样,它将发送 HTTP 400 响应(该:plug_status字段定义)。唯一可能“有问题”的是日志消息。问题是这对你来说是否真的是一个问题。如果是,那么您可以捕获所有/cgi-bin/路径,并在此类请求到达路由器之前忽略这些请求。

于 2022-01-25T10:37:16.960 回答