前($ ENV { 'QUERY_STRING})と($ CGI->のparam())の違いは何ですか?
-
24-09-2019 - |
質問
は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
のドキュメント。
CGI.pm のソースごと
A>
#### Method: param
# Returns the value(s)of a named parameter.
# If invoked in a list context, returns the
# entire list. Otherwise returns the first
# member of the list.
# If name is not provided, return a list of all
# the known parameters names available.
# If more than one argument is provided, the
# second and subsequent arguments are used to
# set the value of the parameter.
QUERY_STRING
は、それが単にURIからクエリ文字列であるWebサーバによって設定されます:あなたはそれここの
所属していません StackOverflow