【问题标题】:Gitweb URL escapes in query stringGitweb URL 在查询字符串中转义
【发布时间】:2016-08-29 16:11:57
【问题描述】:

到目前为止,我的 gitweb 安装工作正常,但所有生成的链接都包含查询字符串,例如

host/gitweb?p=somepath&a=summary

格式不正确。 首先,与号被分号代替。检查 html 时,链接看起来像

host/gitweb?p=somepath;a=summary

点击链接时,浏览器会转义“;”到 '%3b',所以发送到服务器的 url 看起来像

host/gitweb?p=somepath%3ba=summary

gitweb.cgi 不解析这个并显示 404 错误页面。当我用 ';' 替换 '%3b'或“&”,一切正常。

如何在服务器端解决这个问题?

到目前为止,我试图找到产生';'的行在网址中,即第 1457 行

$href .= "?" . join(';', @result) if scalar @result;

替换';' by '&' 在浏览器中给了我一个格式错误的 xhtml。用'&'替换它再次强制浏览器转义';'这会再次产生损坏的网址。

如果我设置选项,问题有点隐藏(我可以查看存储库)

$feature{'pathinfo'}{'default'} = [1];

gitweb.conf 文件中,但不幸的是,无法显示包含多个存储库的文件夹,因为相应的链接使用了一些查询参数。

【问题讨论】:

  • Re "浏览器转义';'到 '%3b'",没办法。那是不合法的。
  • Re "替换';' by '&' 在浏览器中给了我一个格式错误的 xhtml。",您遇到了 XHTML 注入错误。您忘记转义嵌入在 XHTML 中的文本(URL)。 & 需要替换为&
  • 替换';'通过'&'也不起作用,因为';'当我点击链接时被转义。
  • 有没有办法告诉 perl 用 ';' 替换 %3b在解析查询字符串之前?
  • 再说一次,这不是真的。如果您将; 替换为&,然后在将其放入XHTML 时将其编码为&,则链接中没有;

标签: perl url cgi gitweb


【解决方案1】:

您没有将查询字符串编码或解码为漏洞。 参数名称和值必须单独编码和解码,查询字符串的分隔符即..

= ; &

永远不要对 URL 进行编码或解码。

您可以检查服务器环境变量$ENV{REQUEST_URI} 以查看服务器是否确实收到了您所说的编码信息。如果浏览器正在发送它,那么这就是问题所在,您无法在 Perl 代码中解决此问题。因为它只会在你的 Perl 代码中造成更多问题。

【讨论】:

  • 我将命令 'die $ENV{'REQUEST_URI'}' 添加到我的 gitweb.conf 中,这让我在 apache 错误日志中得到以下行:'[Tue Aug 30 18:37:08.416866 2016 ] [cgi:error] [pid 32381] [client 141.30.155.71:54651] AH01215: [Tue Aug 30 18:37:08 2016] gitweb.cgi: FATAL: [Tue Aug 30 18:37:08 2016] gitweb. cgi:致命:/gitweb/gitweb.cgi?a=project_list%3bpf=projects/foo 在 /home/git/gitweb.conf 第 61 行。 - 所以浏览器似乎发送了位置栏中打印的请求。也许我可以通过 Apache 重写请求,以便将 '%3b' 替换为 ';' ...
【解决方案2】:

我在 apache 中使用重写规则以某种方式解决了这个问题:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^a=project_list%3bpf=(.*)$
RewriteRule (.*) $1?a=project_list;pf=%1 [QSA]

它仅适用于具有指定路径且启用了 pathinfo 功能的项目列表。一种整体方法是搜索所有可能的查询参数并将它们全部替换。

但是,这个解决方案并不令人满意,因为它并没有解决 gitweb 奇怪的 url 转义的实际问题。

【讨论】:

  • 对于它的价值,我遇到了同样的问题,并通过在我的 Apache 配置中将 NE 标志添加到我现有的 RewriteRule 指令来修复它。另见stackoverflow.com/questions/18323782/…
猜你喜欢
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 2020-12-24
  • 1970-01-01
  • 2013-12-21
  • 2011-06-19
  • 2014-08-25
相关资源
最近更新 更多