CGIです 1対策できるツール

PerlでHTTPステータスコード404を出力

HTTPステータスコードについてはhttp://www.asahi-net.or.jp/~AX2S-KMTN/ref/status.htmlの記載を参考にさせていただきました。

404【Not Found】をPerlで出力させたい場合は1行で済みます。
print "Status: 404 Not Found\n";
です。

例えば動的ページ生成で環境変数PATH_INFOを使用して、
http://xxxx.hp.infoseek.co.jp/bbs.cgi/数字/が正常なアクセスだとします。
↑以外の存在しないURLにアクセスされた時に404を出力したい場合は、bbs.cgiを下記のようにすればOKです。

$path_info = $ENV{'PATH_INFO'};
if($path_info !~ /^\/\d+\/$/){print "Status: 404 Not Found\n";exit;}

exit;のみですと、500【Internal Server Error】が出力されます。

こうすることで、存在しない例えばhttp://xxxx.hp.infoseek.co.jp/cgi-bin/bbs.cgi/1/6546というURLへアクセスされてしまった場合の出力結果は、【インフォシーク Japanが提供しておられる約160万人が会員登録する国内最大級のホームページスペース。大容量で多機能、無料 ながらCGIの使用が可能という充実したサービス無料ホームページ作成 レンタルサーバー infoseek isweb】なら下記のようになります。


HTTP/1.1 404 Not Found 
Date: Sat, 02 Sep 2006 00:19:28 GMT 
Server: Apache 
Connection: close 
Content-Type: text/html; charset=iso-8859-1 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<HTML><HEAD> 
<TITLE>404 Not Found</TITLE> 
</HEAD><BODY> 
<H1>Not Found</H1> 
The requested URL /x/x/x/xxxx/cgi-bin/bbs.cgi/1/6546 was not found on this server.<P> 
<P>Additionally, a 500 Internal Server Error 
error was encountered while trying to use an ErrorDocument to handle the request. 
</BODY></HTML>


もちろん、PATH_INFOだけではなく、$ENV{'QUERY_STRING'}でもプログラム内で出力を操作してあげればOKですね。
Webを徘徊するクローラーや不意のスパムツールなどの過負荷対策のために、動的ページの存在しないURLへの404ステータス出力設定は有用かもしれません。


Copyright and Powererd by cgi-desu.nobaby.nobody.jp
レンタルCGI