パソコンQ&A

htaccessで簡単に会員制ページを作る[Basic認証]

htaccessを使うとIDとパスワードを入力しないと見れないページを作ることができます。
(『Basic認証』または『Digest認証』[違いはコチラ])

.htaccessと.htpasswdの対を後述の方法で作成し設置するだけです。

パスワードを設定する階層(ディレクトリ)に.htaccessをアップします。
.htpasswdは.htaccessに記載した場所にアップします。
(セキュリティ上.htaccessと同じ場所には置かないほうがよいですが、ログインする人が信頼できる場合は同じ場所でもよいでしょう。)

ただし.htaccessを設置したディレクトリ内の全てのディレクトリに関してパスワード制限が有効となります。

[参考記事] 『.(ドット)』から始まるファイルが作れない場合


>これ以降の解説をあなたの設定に合わせて変更する

.htaccessと.htpasswdの内容
.htaccess

<Files .htaccess>
order allow,deny
deny from all
</Files>

AuthUserFile /home/【.htpasswdを置くパス】/.htpasswd
AuthName "Please enter your ID and password"
AuthType Basic
<limit GET POST>
require valid-user
</limit>

.htpasswdを置くパス
ログイン時に表示されるメッセージ(英語以外は文字化けすることがあります。)
認証方式

.htpasswd

test1:teH0wLIpW0gyQ

ID
後述の方法で作成されたパスワード(注意:下のフォームでは変更されません!)

複数人にIDとパスワードを割り振るには複数人分を改行して記載します。
.htpasswd

test1:teH0wLIpW0gyQ
test2:tejmN0ZRRrAxs
test3:tehE4TBWN1.2c

は「改行」です。

.htpasswdの作り方
注意:以下でのOSというのは、WWWサーバー[ファイルのアップ先]のOSであって、今このページを見ているパソコン[ローカルPC]のOSではありません。

設置場所がLinuxサーバーであれば

ID:   PW:   


サーバーに直接アクセスできるようであれば下記の方法です。

WindowsもLinuxもhtpasswdでパスワードファイルが作れます。
htpasswdの場所はapacheインストールフォルダ以下bin内です。

Windows版apache
[スタート]-[ファイル名を指定して実行]-『command』または『cmd』
半角空白が入る場合は"〜〜"で囲みます。

C:\> "C:\Apache2.2\bin\htpasswd" -mc c:\www\.htpasswd test
New password: ****
Re-type new password: ****
Adding password for user test


Linux版apache

# /usr/local/apache2/bin/htpasswd -mc /usr/local/apache2/htdocs/.htpasswd test
New password: ********
Re-type password: ********
Adding password for user test


あなたのサーバーのhtpasswdのパス
.htpasswdの出力先のパス
ユーザー名
パスワード
MD5形式で新規作成の意味[htpasswdオプション]
「-mc」の「c」は新規作成の意味なので、2人目からは「-mc」は「-m」とします。
そうしないと今までのhtpasswdは追記されず上書きされます。


認証方式
AuthType特徴
Basic Base64方式でエンコードされるだけ
盗聴されると復号できる
Digest Basicよりセキュリティが高い
Internet Explorer4.0やNetscape4.xは未対応
(HTTP/1.1対応ブラウザが必要)
モジュールmod_autu_digestが必要
Base64方式でエンコードされるのは複雑にするのが目的ではなくヘッダー情報として使える文字に変換するためです。

.htaccessによるパスワード制限は『Basic認証』も『Digest認証』もIDとパスワードがHTTPヘッダーで送られます。
[参考記事] HTTPヘッダーを見る方法

PHPであれば

【入力情報】 = base64_decode(【Basic認証のHTTPヘッダー】);

Basic認証を使う場合は危険性を理解して使ってください。

これを防ぐにはSSL認証を併用するなどの対策が必要です。

複数ユーザーを制御する
require valid-userを変更すると.htpasswdファイルに書かれているユーザーから選択してログインできるようにできます。
『valid-user』とは.htpasswdにある全てのIDという意味です。
(valid=有効)

ユーザーを限定するには

require user test

複数の場合は半角スペースで区切ります。

require user test1 test2 test3


ユーザーが複数の場合はグループによる制御もできます。
「AuthGroupFile」にグループファイル「.group」を指定して、そのグループの人だけ許可する方法です。

.htaccess

require valid-user

   ↓変更

AuthGroupFile /home/【.groupのパス】/.group
require group group1

複数の場合は半角スペースで区切ります。

require group group1 group2


.group

group1:test1 test2 test3
group2:example1 example2 example3
group3:sample1 sample2 sample3


これで許可されたグループのメンバー以外は.htpasswdファイルに書かれていてもログインできません。

ただしこれらは.htpasswdファイルにIDとパスワードが書かれていることが前提です。

まとめ直すと…
.htaccess

<Files .htaccess>
order allow,deny
deny from all
</Files>

AuthUserFile /home/【.htpasswdを置くパス】/.htpasswd
AuthName "Please enter your ID and password"
AuthType Basic
AuthGroupFile /home/【.groupのパス】/.group

<limit GET POST>
require group group1
</limit>


URLにIDとパスワードを併記する方法

http://test:test00@kikky.net/pc/passlock/

ユーザーID
パスワード(そのまま書きます)
アクセスするページのアドレス

この方法だとIDとパスワードを入力する手間は省略できますが、パスワードが明らかな平文なのでセキュリティがかなり低い方法です。


ユーザーの追加
Windows版apache

C:\> "C:\Apache2.2\bin\htpasswd" -m c:\www\.htpasswd test


Linux版apache

# /usr/local/apache2/bin/htpasswd -m /usr/local/apache2/htdocs/.htpasswd test


あなたのサーバーのhtpasswdのパス
.htpasswdの出力先のパス
ユーザー名
MD5形式[htpasswdオプション]


ユーザーの修正
追加のときと同じです。
Windows版apache

C:\> "C:\Apache2.2\bin\htpasswd" -m c:\www\.htpasswd test


Linux版apache

# /usr/local/apache2/bin/htpasswd -m /usr/local/apache2/htdocs/.htpasswd test


あなたのサーバーのhtpasswdのパス
.htpasswdの出力先のパス
ユーザー名
MD5形式[htpasswdオプション]


ユーザーの削除
.htpasswdをテキストエディタで開いて、IDを消すことでできますが、コマンドでもできます。

Windows版apache

C:\> "C:\Apache2.2\bin\htpasswd" -d c:\www\.htpasswd test


Linux版apache

# /usr/local/apache2/bin/htpasswd -d /usr/local/apache2/htdocs/.htpasswd test


あなたのサーバーのhtpasswdのパス
.htpasswdの出力先のパス
ユーザー名
ユーザーを削除[htpasswdオプション]


WindowsMD5形式のみ
Unix、LinuxMD5またはDES暗号化
FreeBSDMD5またはDES暗号化


欠点
Basic認証、Digest認証ともに最大の欠点は「ログアウトできないこと」ではないでしょうか。
一度ログインすると、ブラウザを閉じるまではパスワードなしでページを閲覧できます。

ID・パスワードを入力するのは1回でも、実際にはやり取りするたびに認証が行われています。
このためサーバー負荷が思いのほか大きいです。

パスワードのチェックは.htpasswdファイルを上から順にチェックするので、ユーザーが多いほど遅くなります。
ユーザー数が多いときには別の認証方法を考えましょう。
(人数が多いほど悪意のある人、セキュリティに無頓着な人がいる可能性も増えます。)


htpasswdのオプション
フラグ説明併用不可
-b処理内容を表示する。
-cパスワードファイルを生成する。
既に存在している場合は、消されることとなる。
-n
-n-c
-mパスワード暗号化にMD5を使用。
-dパスワード暗号化にcrypt()を使用。
-sパスワード暗号化にSHAを使用。
-pプレーンテキストのパスワードを使用。
-dユーザを削除する。

htpasswdセキュリティを向上させる方法
(1).htpasswdファイルを、ブラウザでアクセスできる場所(/public_html以下)に置かない。
(2).htaccessファイルに、を設定して.htpasswdファイルの閲覧できないような記述をする。
(3).htaccessファイルに、「AddHandler cgi-script htpasswd」の一行を追記する。
  (.htpasswdを単体ではCGIファイルとして扱わせる)

(2)
.htから始まる名前のファイルにアクセスさせない記述。

<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>

.htaccessの先頭の『.(ドット)』はUNIXやLINUXサーバーでは隠しファイルを意味します。

『.(ドット)』から始まるファイルが作れない場合
Windowsで次のようなエラーが出て『.(ドット)』から始まるファイルが作れない場合はFTPでアップロードする時に 「名前を変えてアップロードする」にするか、アップロードした後にサーバー上で「名前を変更」します。



あなたの設定にあわせて上の表記を変更します

△上部に戻る

このページはリンクフリーです。設定などは自己責任で…
Copy Right kikky

kikky.net