アクセス制限・ベーシック認証

.htaccessファイルを作成します。このファイルは通常のテキストファイルです。テキストファイルには以下の内容を記述します。

記述例
記載内容 調整項目
AuthUserFile /home/futomi/.htpasswd
-----(1)
AuthGroupFile /dev/null  
AuthName "Secret Area" -----(2)
AuthType Basic  
require valid-user  
<Files ~ &quot;^.(htpasswd|htaccess)$"> -----(3)
 deny from all  
</Files>  

番号を振ってある行について説明します。この部分が、環境に合わせて書き換えなければいけません。その他の行については、そのまま書き加えてください

(1)AuthUserFile

パスワードファイルの指定です。ここでの指定は、サーバのルートディレクトリからのフルパスで記述しなければいけません。

(2)AuthName

Basic 認証をかける領域名の指定です。上の図の例では、「Secret Area」の部分です。"(ダブルクォーテーション)」で囲まれた部分は、自由に書き換えてください。ただし、「"(ダブルクォーテーション)」は入れないでください。

(3)Files

これは、なくても問題ありません。ただし、「.htaccess」や「.htpasswd」はやはり見せたくありません。そのために、この記述を加えることをお勧めします。

■修正必須
1行目の「フルパス」の部分は「.htpasswd」の設置場所に合わせて修正が必要です。

サーバーのルートディレクトリからのフルパスを記載しなければ動作しません。「フルパス」は通常のホームページを表示する時のパスと異なる場合が多いので注意が必要です。

例えば、下記のようにIPアドレスやアカウント名を挿入しなければならない場合があります。

 例1)AuthUserFile ~/255.255.255.255/home/data/.htpasswd
 例2)AuthUserFile /home/chama/.htpasswd
 例3)AuthUserFile /web/cgi-bin/cargo/data/.htpasswd
フルパスが分からない場合は、サーバー管理者にお問い合わせ願います。

.htpasswdについて、このファイルもテキストファイルです。

futomi:FeNpx1.147CVA
master:X6ntcZ021IxMw

.htpasswd に記載される情報は、アカウント名とパスワードです。アカウント名とパスワードは「:(コロン)」で区切られます。複数のアカウントを指定する場合には、改行をして次の行に記述します。パスワードについては、暗号化された状態で保存される必要があります。暗号化は、何かしらツールが必要なのですが、ここでは、パスワードを入れたら、暗号化された文字列を出力する CGI を提供します。

パスワードを入れてください

パスワードの暗号化は、UNIX のパスワードの暗号化と同じです。この手の内容のホームページでしばしば、"Base64で暗号化" と書いてあるページを見かけたことがありますが、これは間違いです。

ちなみに Base64 は暗号化ではありまあせん。符号化といったほうが正しいかと思います。ただし、ブラウザーからサーバへリクエストをする際には、アカウント、パスワードともに、Base64 で符号化されて送信されます。これは HTTP/1.1 で規定されています。

Base64 で符号化された文字は、簡単に元に戻せます。しかし、UNIX のパスワードの暗号化は、簡単には戻せません。つまり、暗号化された文字列を発見されたとしても、すぐにはパスワードを解析することができないのです。

しかし不可能ではありません。したがって、あなたに関係する言葉をパスワードにすることは、暗号化されたパスワードを解析しようとする悪意のあるクラッカーの手間を省くこととなります。それを防ぐためにも、「.htpasswd」ファイルは、見ることができないようにする必要性があります。パスワードを暗号化するにはどうしたらいいのでしょう。

実は非常に簡単なスクリプトを組むだけで実現できます。Perlの関数「crypt」を使って暗号化します。関数「crypt」の使い方は、以下のとおりです。

crypt(PLAINTEXT, SALT)

「PLAINTEXT」の部分は、暗号化したい文字列です。「SALT」の部分は、大文字・小文字アルファベットと 0 〜 9 の数字、そして、「.(ドット)」「/(スラッシュ)」のいづれか2文字です。

「SALT」は、暗号化する際のキーとなるもので、「PLAINTEXT」が文字列でも、「SALT」を変えることによって暗号化文字列が異なってきます。

つまり同じ「PLAINTEXT」に対して、4096 通りの暗号化パスワードが生成しうるわけです。「SALT」は、固定で決めてしまってもいいのですが、できる限り複雑にするために、生成するたびに、ランダムな文字列を指定します。

いろいろな方法があるかと思いますが、ここでは、ただ単に rand 関数を使います。

#!/usr/local/bin/perluse CGI;
$| = 1;
$query = new CGI;
$pass = $query->param('PASS');
$encpass = &encrypt_passwd($pass);print "Content-type: text/html\n\n";
print '<table border="1">',"\n";
print "<tr><td>パスワード</td><td><tt>$pass</tt></td></tr>\n";
print "<tr><td>暗号化パスワード</td><td><tt>$encpass</tt></td></tr>\n";
print "</table>\n";exit;sub encrypt_passwd {
my($pass)=@_;
my(@salt_set)=('a'..'z','A'..'Z','0'..'9','.','/');
srand;
my($seed1) =int(rand(64));
my($seed2) =int(rand(64));my($salt) = $salt_set[$seed1] . $salt_set[$seed2];
returncrypt($pass,$salt);
}

FTPでサーバーへ転送しファイル名を変更する

●パスワード制限を行ないたいディレクトリに「htaccess.txt」と「htpasswd.txt」を転送します。

●次に転送したファイル名をFTPで変更します。

 「htaccess.txt」を「.htaccess」に、
 「htpasswd.txt」を「.htpasswd」に修正します。

アクセス権の設定
 アクセス権は604に設定して下さい。

 (604で動作しない場合はサーバー管理者にお問い合わせ願います。)
戻る