403エラーを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

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-05-02 (金) 15:22:59 (5831d)