アキラのITメモ:Basic認証とPerlによるhtpasswdの作り方

IT関係、技術関係のメモです。

Basic認証とPerlによるhtpasswdの作り方

いつもどうやって書くんだっけと調べているので、Basic認証による認証方法を簡単にメモ書きとして残しておくことにします。Basic認証とは、所望のディレクトリにアクセス制限をかけるためのものです。よく、小さなウインドウが出てきてユーザ名とパスワードを求められ、間違えると「401 Authorization Required」と出るのがそれです。

以下に示すのは一番簡単な設定方法です。設定によってはグループあるいはユーザごとに認証できる範囲を変えるなどの制御も可能ですが、僕が一番良く使うのは以下の簡単な例です。今のところ。やり方は、まず、.htaccessという名前のファイルに以下の内容を書きます。2行目が認証用のウインドウに表示される文字列で、3行目がパスワードファイルのある場所です。2行目は自由な文章に、3行目は自分の環境に合わせて書き換えてください。

AuthType Basic
AuthName      "enter username and password"
AuthUserFile  /home/akira/misc/.htpasswd
AuthGroupFile /dev/null
Require       valid-user

あとは、上記で指定したパスワードファイル(この例では/home/akira/misc/.htpasswd)を用意すればOKです。例えば、パスワードファイルの内容は以下のような内容にします(この例ではユーザ名test、パスワードtestというアカウントになります。)

test:XS9pGUXVZ7ciw

上記パスワードファイルを作るにはhtpasswdというコマンドを使うのですが、コマンドを使わなくてもパスワードファイルを生成してくれるサイトがあると思うので、パスワードファイルを作りたい方は探してみてください。なお、パスワードファイルはPerlのcript関数を使っても簡単に作成できます。futomi's CGI CafeでCGIによる作成例が記述されていますので、パスワードファイルを生成するCGIに改変して紹介しておきます。

#!/usr/local/bin/perl

use CGI;
$| = 1;
$query = new CGI;
$user = $query->param('USER');
$pass = $query->param('PASS');
$encpass = &encrypt_passwd($pass);

print "Content-type: text/html\n\n$user:$pass\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];
	return crypt($pass,$salt);
}

上記をhtaccess.cgi等の名前で保存し、以下のようなHTMLファイルから呼び出せば、htpasswdを生成できるでしょう。

<html>
<head><title>htpasswd generation form</title></head>
<body>
<form method="post" action="htaccess.cgi">
<p>
User:<input name="USER" size="10" />
Pass:<input name="PASS" size="10" />
<input type="submit" value="送信" />
</p>
</form>
</body>
</html>

カテゴリ: Perl 投稿日: 2007年01月08日 14:26
Trackback URL: http://akira-site.net/cgi-bin/mt/mt-tb.cgi/417

コメント

コメントを投稿





カテゴリ「Perl」内の記事

サイト内検索

カテゴリ

最近のエントリ

関連商品

アバウト

Atom RSS
Powered by MT3.33-ja
合計:total
今日:today 昨日:yesterday