403エラーを404エラーに見せかける
http://extstrg.asabiya.net/pukiwiki/index.php?403%A5%A8%A5%E9%A1%BC%A4%F2404%A5%A8%A5%E9%A1%BC%A4%CB%B8%AB%A4%BB%A4%AB%A4%B1%A4%EB403エラーを404エラーに見せかける †
概要 †
Indexesオプションが設定されていないディレクトリを参照した場合にクライアントに対しては403エラーが返される。これはアクセスは拒否するがディレクトリが存在することを教えてしまう結果となる。
ユーザがアクセスできないディレクトリの存在を知られてしまうことで、ファイル名を狙った辞書攻撃などが行われる可能性があるため、アクセス拒否するディレクトリの存在自体を隠蔽するには403エラーを返さない(404エラーとして返す)ことが望ましい。
方法 †
403エラーを404エラーとして返すには、mod_asisモジュールもしくはCGIによりHTMLヘッダー情報を書き換える方式がある。
これは共に403エラー時のエラードキュメントに404エラーのHTMLヘッダー情報を送るファイルを参照させることでエラーコードを書き換える手法となる。
mod_asis方式 †
mod_asisの設定 †
mod_asisが導入されていることを前提とする。
- mod_asisファイル
/usr/local/apache/modules/mod_asis.so
- httpd.confへの設定
以下の設定後、apacheを再起動し設定を反映させる。
LoadModule asis_module modules/mod_asis.so AddHandler send-as-is asis
エラードキュメントファイルの作成 †
- 404.asis
Status: 404 not found Content-type: text/html <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p></p>
- エラードキュメントの設定
404エラーのエラードキュメントを設定する。(パスは環境に合わせて読み変える)
apacheを再起動し設定を反映させる。
ErrorDocument 403 /404.asis ErrorDocument 404 /404.asis
CGI方式 †
CGI作成 †
HTMLヘッダーを書き換えるCGIを作成し、参照可能な場所に配置する。
- perlの場合
#! /usr/bin/perl print <<HTML; Status: 404 Content-type: text/html <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p></p> HTML __END__
- PHPの場合
<?php header("HTTP/1.0 404 Not Found"); ?>
apache設定 †
404エラーのエラードキュメントを設定する。(パスは環境に合わせて読み変える)
apacheを再起動し設定を反映させる。
- Perlの場合
ErrorDocument 403 /cgi-bin/404.cgi ErrorDocument 404 /cgi-bin/404.cgi
- PHPの場合
ErrorDocument 403 /404.php ErrorDocument 404 /404.php
Last-modified: 2008-05-02 (金) 15:22:59 (5831d)