gpt4 book ai didi

apache - 为什么Apache将URL解码我的查询字符串?

转载 作者:行者123 更新时间:2023-12-01 15:22:52 26 4
gpt4 key购买 nike

我的Web主机拒绝为我提供帮助,因此我在这里向明智的人寻求“黑盒调试”的帮助。这是我发送给他们的邮件的编辑版本:

我在Dreamhost上有两个(以及其他)域:

1)thefigtrees.net
2)shouldivoteformccain.com

我今天注意到,当我在#1上托管CGI脚本时,
CGI脚本运行后,将HTTP GET查询字符串作为QUERY_STRING传递给它
环境变量已被URL解码。这是一个问题,因为
这意味着标准的CGI库(例如perl的CGI.pm)将尝试
分割与号,然后解码字符串本身。那里有两个
潜在的问题:

1)字符串是双重解码的,因此如果将值提交给脚本
例如“%2525”,它将最终仅被视为“%”(解码两次)
而不是“%25”(解码一次)

2)(更常见的是)如果提交的值中有“&”号,则表示
将会(正确地)提交为%26,但QUERY_STRING环境。变量将
将其解码为“&”,然后CGI库将不正确
以该“&”号分隔查询字符串。这是个大问题!

http://thefigtrees.net/test.cgi上的脚本对此进行了演示。它回荡了
调用它的环境变量。在浏览器中导航至:

http://thefigtrees.net/lee/test.cgi?x=y%26z

您可以看到REQUEST_URI正确包含x = y%26z(未编码),但是
QUERY_STRING已将其解码为x = y&z。
如果我在域#2上重复测试(
http://www.shouldivoteformccain.com/test.cgi?x=y%26z)我看到了
QUERY_STRING保持未解码状态,因此CGI.pm会进行拆分和解码
正确地。

我尝试同时禁用两个.htaccess文件,以确保这不是
问题,并没有什么区别。

因为我的Web主机似乎不愿意帮助我,所以有人可以推测这的潜在原因吗?

谢谢,
背风处

最佳答案

我在Apache中有相同的行为。

我相信如果安装了mod_rewrite,它将自动解码URL,但是,即使没有URL,我也看到了自动解码行为。我没有找到另一个罪魁祸首。

常见的解决方法是对输入参数进行双重编码(利用在未编码的URL上调用时URL解码的安全性)。

关于apache - 为什么Apache将URL解码我的查询字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/444599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com