htaccessを使うとIDとパスワードを入力しないと見れないページを作ることができます。
(『Basic認証』または『Digest認証』[違いはコチラ])
.htaccessと.htpasswdの対を後述の方法で作成し設置するだけです。
パスワードを設定する階層(ディレクトリ)に.htaccessをアップします。
.htpasswdは.htaccessに記載した場所にアップします。
(セキュリティ上.htaccessと同じ場所には置かないほうがよいですが、ログインする人が信頼できる場合は同じ場所でもよいでしょう。)
ただし.htaccessを設置したディレクトリ内の全てのディレクトリに関してパスワード制限が有効となります。
[参考記事] 『.(ドット)』から始まるファイルが作れない場合
>これ以降の解説をあなたの設定に合わせて変更する
.htaccessと.htpasswdの内容
.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
ID
後述の方法で作成されたパスワード(注意:下のフォームでは変更されません!)
複数人にIDとパスワードを割り振るには複数人分を改行して記載します。
.htpasswd
test2:tejmN0ZRRrAxs
test3:tehE4TBWN1.2c
は「改行」です。
.htpasswdの作り方
注意:以下でのOSというのは、WWWサーバー[ファイルのアップ先]のOSであって、今このページを見ているパソコン[ローカルPC]のOSではありません。
設置場所がLinuxサーバーであれば
サーバーに直接アクセスできるようであれば下記の方法です。
WindowsもLinuxもhtpasswdでパスワードファイルが作れます。
htpasswdの場所はapacheインストールフォルダ以下bin内です。
Windows版apache
[スタート]-[ファイル名を指定して実行]-『command』または『cmd』
半角空白が入る場合は"〜〜"で囲みます。
New password: ****
Re-type new password: ****
Adding password for user test
Linux版apache
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が必要 |
.htaccessによるパスワード制限は『Basic認証』も『Digest認証』もIDとパスワードがHTTPヘッダーで送られます。
[参考記事] HTTPヘッダーを見る方法
PHPであれば
Basic認証を使う場合は危険性を理解して使ってください。
これを防ぐにはSSL認証を併用するなどの対策が必要です。
複数ユーザーを制御する
require valid-userを変更すると.htpasswdファイルに書かれているユーザーから選択してログインできるようにできます。
『valid-user』とは.htpasswdにある全てのIDという意味です。
(valid=有効)
ユーザーを限定するには
複数の場合は半角スペースで区切ります。
ユーザーが複数の場合はグループによる制御もできます。
「AuthGroupFile」にグループファイル「.group」を指定して、そのグループの人だけ許可する方法です。
.htaccess
↓変更
require group group1
複数の場合は半角スペースで区切ります。
.group
group2:example1 example2 example3
group3:sample1 sample2 sample3
これで許可されたグループのメンバー以外は.htpasswdファイルに書かれていてもログインできません。
ただしこれらは.htpasswdファイルにIDとパスワードが書かれていることが前提です。
まとめ直すと…
.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とパスワードを併記する方法
ユーザーID
パスワード(そのまま書きます)
アクセスするページのアドレス
この方法だとIDとパスワードを入力する手間は省略できますが、パスワードが明らかな平文なのでセキュリティがかなり低い方法です。
ユーザーの追加
Windows版apache
Linux版apache
あなたのサーバーのhtpasswdのパス
.htpasswdの出力先のパス
ユーザー名
MD5形式[htpasswdオプション]
ユーザーの修正
追加のときと同じです。
Windows版apache
Linux版apache
あなたのサーバーのhtpasswdのパス
.htpasswdの出力先のパス
ユーザー名
MD5形式[htpasswdオプション]
ユーザーの削除
.htpasswdをテキストエディタで開いて、IDを消すことでできますが、コマンドでもできます。
Windows版apache
Linux版apache
あなたのサーバーのhtpasswdのパス
.htpasswdの出力先のパス
ユーザー名
ユーザーを削除[htpasswdオプション]
Windows | MD5形式のみ |
Unix、Linux | MD5またはDES暗号化 |
FreeBSD | MD5またはDES暗号化 |
欠点
Basic認証、Digest認証ともに最大の欠点は「ログアウトできないこと」ではないでしょうか。
一度ログインすると、ブラウザを閉じるまではパスワードなしでページを閲覧できます。
ID・パスワードを入力するのは1回でも、実際にはやり取りするたびに認証が行われています。
このためサーバー負荷が思いのほか大きいです。
パスワードのチェックは.htpasswdファイルを上から順にチェックするので、ユーザーが多いほど遅くなります。
ユーザー数が多いときには別の認証方法を考えましょう。
(人数が多いほど悪意のある人、セキュリティに無頓着な人がいる可能性も増えます。)
フラグ | 説明 | 併用不可 |
-b | 処理内容を表示する。 | |
-c | パスワードファイルを生成する。 既に存在している場合は、消されることとなる。 | -n |
-n | -c | |
-m | パスワード暗号化にMD5を使用。 | |
-d | パスワード暗号化にcrypt()を使用。 | |
-s | パスワード暗号化にSHAを使用。 | |
-p | プレーンテキストのパスワードを使用。 | |
-d | ユーザを削除する。 |
htpasswdセキュリティを向上させる方法
(1).htpasswdファイルを、ブラウザでアクセスできる場所(/public_html以下)に置かない。
(2).htaccessファイルに、
(3).htaccessファイルに、「AddHandler cgi-script htpasswd」の一行を追記する。
(.htpasswdを単体ではCGIファイルとして扱わせる)
(2)
.htから始まる名前のファイルにアクセスさせない記述。
Order allow,deny
Deny from all
Satisfy All
</Files>
.htaccessの先頭の『.(ドット)』はUNIXやLINUXサーバーでは隠しファイルを意味します。
『.(ドット)』から始まるファイルが作れない場合
Windowsで次のようなエラーが出て『.(ドット)』から始まるファイルが作れない場合はFTPでアップロードする時に
「名前を変えてアップロードする」にするか、アップロードした後にサーバー上で「名前を変更」します。