環境変数文字列に(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>