3

私の Web ホストはこれについて私を助けることを拒否したので、私はここの賢明な人々に「ブラックボックスのデバッグ」の助けを求めています。以下は、私が彼らに送ったものの編集版です。

私はdreamhostに2つの(とりわけ)ドメインを持っています:

1) thefigtrees.net 2) shouldivoteformccain.com

#1 で CGI スクリプトをホストすると、CGI スクリプトが実行されるまでに、QUERY_STRING 環境変数として渡された HTTP GET クエリ文字列が既に URL デコードされていることに気付きました。これは、標準の CGI ライブラリ (perl の CGI.pm など) がアンパサンドで分割し、文字列自体をデコードしようとすることを意味するため、問題です。これには 2 つの潜在的な問題があります。

1) 文字列は二重にデコードされるため、「%2525」などの値がスクリプトに送信されると、「%25」(1 回デコード) ではなく、単に「%」(2 回デコード) として扱われることになります。

2) (より一般的) 送信された値にアンパサンドがある場合、(適切に) %26 として送信されますが、QUERY_STRING env. 変数はすでに "&" にデコードされており、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 ホストは私を助けたがらないように見えるので、誰かがこれの潜在的な原因を推測できますか?

ありがとう、リー

4

2 に答える 2

1

私はApacheでも同じ動作をしています。

インストールされている場合、mod_rewrite は URL を自動的にデコードすると思いますが、それがなくても自動デコードの動作を見てきました。私は他の犯人を追跡していません。

一般的な回避策は、入力パラメーターを二重にエンコードすることです (エンコードされていない URL で呼び出されたときに URL デコードが安全であることを利用します)。

于 2010-01-25T22:45:03.397 に答える
0

奇妙。ここからは、これが発生する理由の手がかりを得ることができません...環境のバグであることを確認することしかできず、ルールの書き換えなどの構成の違いが疑われます。

CGI 1.1 では、このデコードは、QUERY-STRING ではなく、SCRIPT-NAME と PATH-INFO に対してのみ行われるべきです。なんてことになってしまうのは無意味だし面倒くさいが、それが仕様だ。使用可能な変数 (Apache など) の代わりに REQUEST-URI を使用することは、パス部分に範囲外の文字や Unicode 文字を配置したい場所の一般的な回避策であるため、クエリ文字列に対して同じことを行うのが合理的かもしれません。ホストから何らかの解決策が得られるまで。

最近はVPSが安い…

于 2009-01-15T01:15:48.590 に答える