環境変数文字列に(HTML構文上)不正な文字が入っている、つまり汚染されているかもしれないということで…
perl版 環境変数表示の除染前
#!/usr/bin/perl
use warnings;
use strict;
use utf8;
print "Content-type: text/html\n\n";
print "<html>\n".
"<head>\n".
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n".
"</head>\n".
"<body>\n".
"<pre>\n";
foreach(sort keys %ENV)
{
my $str = $_;
print $str . " : " . $ENV{"$str"} . "\n";
}
print "</pre>\n".
"</body>\n</html>\n";
環境変数を画面出力する部分に、HTML::Entities::encode_entitiesを挿入することで除染できる。
perl版 環境変数表示の除染後
#!/usr/bin/perl use warnings; use strict; use utf8; use HTML::Entities; print "Content-type: text/html\n\n"; print "<html>\n". "<head>\n". "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n". "</head>\n". "<body>\n". "<pre>\n"; foreach(sort keys %ENV) { my $str = $_; print HTML::Entities::encode_entities($str) . " : " . HTML::Entities::encode_entities($ENV{"$str"}) . "\n"; } print "</pre>\n". "</body>\n</html>\n";
次に、PHPの場合は
php版 環境変数表示の除染前
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?php
print("<p>\$_SERVER :</p>\n<pre>\n");
print_r($_SERVER);
print("</pre>\n");
print("<p>\$_ENV :</p>\n<pre>\n");
print_r($_ENV);
print("</pre>\n");
?>
</body>
</html>
print_r関数の第2引数にtrueを指定して、一旦文字列に出力し、それを除染する。
php版 環境変数表示の除染後
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?php
print("<p>\$_SERVER :</p>\n<pre>\n");
print htmlspecialchars(print_r($_SERVER, true), ENT_QUOTES);
print("</pre>\n");
print("<p>\$_ENV :</p>\n<pre>\n");
print htmlspecialchars(print_r($_ENV, true), ENT_QUOTES);
print("</pre>\n");
?>
</body>
</html>