質問

はPerlのCGIスクリプトのために、これら二つの違い(技術的に)何ですか?

#!/usr/bin/perl 
use CGI; 
$cgi = new CGI; 
print $cgi->header(),
$cgi->start_html(),
$cgi->pre($cgi->param()), 
$cgi->end_html();

#!/usr/bin/perl 
use CGI; 
$cgi = new CGI; 
print $cgi->header(),
$cgi->start_html(), 
$cgi->pre($ENV{'QUERY_STRING'}), 
$cgi->end_html();
役に立ちましたか?

解決

このようなHTTPリクエストを想定

GET my.cgi?foo=bar&baz=buz

は、従来のCGIインターフェースを持つWebサーバの下で実行すると、環境変数QUERY_STRINGがfoo=bar&baz=buzになります。環境変数は、URLエスケープされません。値があるか、空の文字列に強制変換されている場合$cgi->pre(...)でそれを印刷するだけで<pre></pre>タグ(または単一<pre />タグ付きのenv VARを同封します。

$cgi->param()、一方、および引数なしでリストコンテキストを想定した上で、のリストを返します。のののURL-エスケープされていないのCGIパラメータ名、この場合のfooでとbarます。

$cgi->pre(...)はほんの少し、クロスサイトスクリプティングの注入を使用してCGIを危険にさらす可能性があるので$ENV{QUERY_STRING}のないの、その引数をHTML-逃れないことに注意してください。)

他のヒント

CGIオブジェクトのparamメソッドはGETとPOSTのパラメータを含む、すべてのクエリパラメータのリストを返します。あなたは引数に渡していない限り、その場合には、その名前と戻り値を持つパラメータを検索します。

QUERY_STRING環境変数が未解析のクエリ文字列が含まれています。

あなたが質問にコードをしようとした場合、これはかなり明白だったでしょう。

ここのですparamのドキュメント。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top