如果 pathinfo 包含部分 URI 编码的 URL,Apache 将返回 404

如果 pathinfo 包含部分 URI 编码的 URL,Apache 将返回 404

(哇,这个标题太烂了......如果您有更好的标题,请随意在评论中提出建议或编辑它。)

我有一台带有 CGI 程序的服务器,该程序接收 URL 作为路径信息,检查用户的 IP 地址,并将他们重定向到直接转到该 URL(如果他们是我们组织的内部用户)或通过代理将他们发送到该 URL(如果他们是外部用户)。CGI 本身运行良好,但有些 URL 会让 apache 返回 404 Not Found 错误,而不是调用脚本。这似乎与包含 URI 编码路径的目标 URL 有关。例如,

http://myserver.org/cgi-bin/ipchk/http://other.server.org/10.1007%2F3-540-28519-9_8

返回 404,而

http://myserver.org/cgi-bin/ipchk/http://other.server.org/10.1007/3-540-28519-9_8

(相同的 URL,但%2F解码为/)可以正常工作。

我已经验证过(通过error_log在启动时输出)当返回 404 时,脚本ipchk根本没有启动。这些错误肯定来自 apache 本身,而不是脚本将用户重定向到不存在的 URL 导致的。

为什么 pathinfo-URL 的编码会影响 apache 定位 ipchk 脚本的能力以及我需要做什么才能让它通过全部 /cgi-bin/ipchk/URIipchk不管后面跟着什么?

答案1

为了保护用户免受在检查传入路径之前未正确解码数据的 CGI 代码的侵害,apache 拒绝(作为 404 Not found)包含 URI 编码形式的正斜杠 ( %2F) 或反斜杠 ( %5C) 的 URL,如下所述在本文中

要绕过此检查,您必须使用 apache 2.0.46 或更高版本,并启用AllowEncodedSlashesApache 配置中的指令。(该指令不是工作.htaccess;它仅允许在服务器或虚拟主机上下文中工作。)

相关内容