【发布时间】:2009-01-14 20:47:51
【问题描述】:
我的网络主机拒绝帮助我解决这个问题,所以我来这里寻求一些“黑盒调试”的帮助。这是我发送给他们的经过编辑的版本:
我在 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 文件,以确保这不是 问题,并没有看到任何区别。
由于我的网络主机似乎不愿意帮助我,有人能推测出这种情况的潜在原因吗?
谢谢, 李
【问题讨论】:
标签: apache cgi query-string urldecode