XSERVER PC・728 x 90 wordpress

Basic認証をする方法[WordPress]

シェアしていただけるとうれしいです

Basic認証って何?

鍵


誰でも他人に知られたくないこととか、他人に見られたくないものとかあるはず。そういう大切なこととかものって公衆の面前に置いたりしないよね?

露出癖のある人は別だけど。

インターネットも同じで、インターネット上に置いたものは公衆の面前に置いたのと同じことで、たとえ自分しかURLを知らなくても、一般公衆にURLが漏れてしまう可能性がある。

アレだ。ベッドの下にアレを隠したにも関わらず、お母ちゃんにバレていたなんていうことは、多くの男性が経験しているはずだ。

アレはまだ他の第三者に公表されることはまずないと思うが、インターネット上に置いたものはGoogleなどのbotさんにありかを嗅ぎつかれると、インデックスされ、検索結果に載ってしまう。

あれ〜!ぼくのアレが全世界に公表されてしまうなんて〜!

ということになりかねない。アレはバレないように、そっと自分しかアクセスできないようにしておかなければならないのだ。

しかし、インターネットにはベッドの下のような場所はない。うまく隠せたと思っても、インターネットのお母ちゃんはすぐさま見つけてしまうだろう。

かつてインターネットにアレを隠したかった人が多分いたのだと思う。HTTPプロトコル(Webサーバーとブラウザがデータをやりとりするための取り決め)に Basic認証という仕組みを作ってくれていた。銀行やクレジットの決済や、政府機関や大企業がアレを隠すには少し貧弱な仕組みだが、ぼくたちがアレを隠すには十分な仕組みだ。

こんなダイアログが出たのを見たことがあるでしょう?ユーザー名とパスワードを入れて、合っていたらページが見えるやつね。これはたいていの場合、Basic認証という仕組みを使っている。(註:Digest認証というのもある)

Basic認証

Basic認証は、ディレクトリ単位、もしくはファイル単位で行うことができる。以前の記事でも触れてきたけれども、もう少しわかりやすく解説したい。

Basic認証の仕組み

少々専門的な話なので、この章は読み飛ばしていただいても大丈夫。

先にBasic認証はディレクトリ単位、ファイル単位で行う、と書いたが、Basic認証を設定したところにブラウザでアクセスすると、Webサーバーはブラウザに対して401 Authorization Required(認証が必要ですよ)というステータス(応答)を返す。このステータスを受け取ったブラウザは先ほどのようなダイアログを表示する。

ユーザー名とパスワードを入力して、認証に成功するとWebページが表示される。ユーザー名かパスワードに間違いがあったときは、再び401 Authorization Requiredがサーバーから返ってきてダイアログが表示され、ページは表示されない。

というような仕組みになっている。

用途としては、インターネット上にアレを置く場合の他に、

  • サイトの公開前で調整中なので、誰にも見られたくない
  • テスト用のページでいっぱいエラーが出るので、誰にも見られたくない

ということが考えられる。比較的脆弱な仕組みなので、マジの顧客情報10万人分のデータを置きました!などということは、間違ってもやめておいた方がいい。

Basic認証をするために必要なファイル

Basic認証を行うには下記のファイルが必要となる。

パスワードファイル

ユーザー名とパスワードが記載されたファイル。普通は.htpasswdというファイル名が付けられるが、別になんでも構わない。ただし、普通のファイル名にしてしまうと外部からアクセスが可能になってしまう。「.ht~」というファイル名にしておくと、外部からアクセス出来ない仕組みになっている。中身は、

という形式になっていて、1行に1ユーザーの情報を書き、複数ユーザーの登録が可能になっている。

.htpasswdはサイト全体に対して一個で構わない。(必要であれば複数個の.htpasswdを作っても構わない)

アクセス制御ファイル

Webサーバーへのアクセスを制御するためのファイルで、通常、.htaccessというファイル名になっている。このファイルの名前は大元のWebサーバーの設定で決められているから、他のファイル名に変えることはできない。レンタルサーバー業者から特に指定がない限り、.htaccessという名前であると考えていい。

ディレクトリに対してBasic認証を行うのであれば、認証を行う一番上のディレクトリに.htaccessを置く。ファイルに対して認証を行うのであれば、そのファイルがあるディレクトリに置く。

特にWebのルートディレクトリに置かれている.htaccessは、サイト全体の設定に関することが書かれていることが多い。WordPressであれば、WordPressの動作に関することがすでに書かれている。サイト全体に認証をかけるのであれば、この中に「Basic認証を行いますよ」という設定を「追記する」ということになる。

Basic認証をしてみる

では、実際にBasic認証の設定をしてみよう。
用意するものは

  • テキストエディタ。秀丸エディタとかサクラエディタなどのテキストエディタ。Windowsのメモ帳では編集できない。(改行コードが対応していないので行が改行されない)
  • FTPクライアントソフト。

こちらの記事を参考に。

[WordPress]やさしいFTPクライアントソフトの使い方
[WordPress]やさしいFTPクライアントソフトの使い方
サーバーのファイルをバックアップするには?こちらの記事でWordPressのバックアップをする方法を書きました。WordPres...

パスワードファイルを作る

まず、認証に必要なユーザー名とパスワードを記載した「.htpasswd」ファイルを作成しよう。

Linux、Macの場合

おそらくApacheがインストールされているので(されていなければインストールする)、コンソールから次のコマンドで「.htpasswd」ファイルを作成する。

「user」の部分はご自身のユーザー名に置き換えよう。
パスワードの入力を二回求められる。

次のように表示されればOK。

Windowsの場合

WindowsにはApacheがインストールされていないので、以前の記事で書いたXAMPPをインストールしていれば、そのツールが使える。

[WordPress]ブログのテストにはXAMPPがオススメ
[WordPress]ブログのテストにはXAMPPがオススメ
テストの環境のオススメWordPressをカスタマイズしようとしてファイルを編集して、 画面が真っ白でなにも表示されない! とか...

Windowsのコマンドプロンプトを立ち上げて、

と入力してEnterキーを押す。「user」の部分はご自身のユーザー名に置き換えよう。

※ユーザー権限などでC:\にファイルが作成できない場合は、あらかじめC:\tempなどのディレクトリを作成しておき、そこへパスワードファイルを作成すればよい。

パスワードの入力を二回求められるのはLinuxやMacと同じ。

次のように表示されればOK。

PHPを使う場合

LinuxやMacでもApacheがインストールされていなかったり、WindowsでもXAMPPがインストールされていない場合は、PHPで作るという手もある。WordPressを使っているならPHPが使えるはずなので、たいていのレンタルサーバーでこの手法が取れる。

テキストエディタで、

と入力して、「passwd.php」と名前をつける。文字コード、改行コートはなんでもいい。もちろん「パスワード」のところは実際のパスワードに置き換えること。

「passwd.php」をFTPのクライアントソフトでWebのルートディレクトリにアップロードしょう。

アップロードし終えたら、ブラウザでこのファイルにアクセスする。URLは「http://あなたのサイト/passwd.php」。こんなふうに表示されるはずだ。

これをコピーして、テキストエディタに次のように貼り付ける。

形式は、

という形になっている。(文字列はブラウザをリロードするたびに変わるが、どのタイミングの文字列を使っても大丈夫)

LinuxやMacは「.htaccess」というファイル名に、Windowsは「.(ドット)」から始まるファイル名は作成できないので、とりあえず、「htpasswd.txt」という名前で保存しよう。

作成した「passw.php」は必要がなくなったらすぐにサーバー上から削除すること。

パスワードファイルをFTPクライアントソフトでサーバーにアップロードする

できあがったパスワードファイルは、FTPのクライアントソフトを使ってWebのルートディレクトリにアップロードしよう。Windowsのテキストエディタで作成した「htpasswd.txt」はアップロードしてからサーバー上で「.htaccess」に名前を変更する。

.htaccessファイルに記述する

実際にBasic認証をかけるときは、先ほどサーバーにアップロードしたパスワードファイルを使って認証を行いますよ、という記述を.htaccessに書いてあげる必要がある。そのときに必要になるのが、パスワードファイルのサーバー上の絶対パスだ。

Web上の絶対パスというのは「http://あなたのサイト/」とか「http://あなたのサイト/abc/」という表記がWeb上の絶対パス、ということになる。サーバー上の絶対パスというのは、サーバー上のどのディレクトリを「http://あなたのサイト/」として見せているのか?ということを知る必要がある。

Webのルートディレクトリがサーバー上のどのディレクトリになるかを知るには、テキストエディタに

と記載して、「path.php」と名前をつけて保存し、FTPクライアントソフトでWebのルートディレクトリにアップロードしよう。

ブラウザを使って、「http://あなたのサイト/path.php」にアクセスすると、次のような文字列が表示される。

/var/www/html

これがWebのルートディレクトリのサーバー上の絶対パスになる。つまり、
http://~.com/

/var/www/html/
ということだ。
http://~.com/abc/
であれば、
/var/www/html/abc/
になる。

以下、実際にBasic認証をかける設定を行ってみよう。今回は不正アクセス対策のために、WordPressの管理ページにBasic認証を施してみる。

[WordPress]プラグインを使わずに不正アクセスを防ぐ方法
[WordPress]プラグインを使わずに不正アクセスを防ぐ方法
不正アクセスって何?「不正アクセス」という言葉をよく聞くようになりました。イヤな世の中だよね。「不正」なんだよ。正しくないわけね。 ...

ディレクトリに認証をかけるとき

WordPressの管理ページは、ほとんどのファイルが「http://あなたのサイト/wp-admin/」以下に置かれている。「/wp-admin/」のディレクトリ以下全てにBasic認証をかけるときは次のように記載する。

1行目に書かれている「/var/www/html/.htpasswd」がパスワードファイルのサーバー上の絶対パスである。

サーバー上にすでに.htaccessがあるときは、ダウンロードして上の記述をファイルの先頭に追記しよう。サーバー上にないときにはテキストファイルで上記を記述し、LinuxやMacであれば.htaccessと名前をつける。Windowsはhtaccess.txtと名前をつけて保存する。作成したファイルは「/wp-admin/」にアップロードしよう。Windowsの場合のみ「.htaccess」にリネームする。

.htaccessをアップロード

これでブラウザで「http://あなたのサイト/wp-admin/」にクセスすると、下記のようなダイアログが表示される。

認証ダイアログ

ユーザー名とパスワードを入力し、認証に成功すれば管理ページが表示されるはず。失敗すれば、何度もダイアログが表示される。キャンセルをクリックすると、下記のように表示される。

404 Authorization Required

ファイルに認証をかけるとき

実はWordPressの管理ページのログインページは「/wp-admin/」ではなく、もう一つ上の階層にある。「http://あなたのサイト/wp-login.php」が管理ページのログインページになっている。「/wp-admin/」にBasic認証をかけただけではログインページにアクセスできてしまう。(実際にはダイアログが表示されるが、キャンセルをクリックすると表示される)

ログインページが表示される

ログインページの画像やCSSのファイルは「/wp-admin/」にあるのでBasic認証を求められるが、ログインページそのものは「/wp-admin/」にはないので、Basic認証は求められない。だからキャンセルをクリックすると、表示は崩れているが、表示そのものはされるわけだ。

ディレクトリと同じように、ファイルにもBasic認証をかけることが可能だ。Webのルートディレクトリにある「.htaccess」をダウンロードして、ファイルの先頭に下記の記述を追加する。

ディレクトリに対してBasic認証をかけるときとは少し書き方が違う。1行目で「/wp-login.php」に対してBasic認証をかけますよ、という書き方になっている。編集が終わったら、Webのルートディレクトリにアップロードしよう。

.htaccessをアップロード

先ほどの管理ページヘのログインページをリロードすると、ダイアログが表示されるはずだ。

認証ダイアログ

例外を作りたいとき

これで管理ページヘのBasic認証は完璧、と思いきや、実は「/wp-admin/admin-ajax.php」は、管理ページだけではなく、一般ページからもプラグインなどで使われていることがあるらしい。このファイルにBasic認証がかかっていると、一般ユーザーはアクセスすることができず、プラグインでエラーになることがあるらしい。試しに「/wp-admin/admin-ajax.php」にアクセスするとダイアログが表示される。

「/wp-admin/admin-ajax.php」をBasic認証から除外するには「/wp-admin/.htaccess」に下記の記述を追加する。

追記した「.htaccess」を「/wp-admin/」にアップロードしよう。これで「/wp-admin/admin-ajax.php」に認証なしでアクセスできるはずだ。

admin-ajax.php

ご注意

「.htaccess」はアクセス制御ファイルと呼ばれ、サイトの動作を定義している重要なファイルでもある。特にWebサイトのルートディレクトリに置かれている「.htaccess」は大切なファイルなので、編集する際には十分注意を払っていただきたい。失敗すると、こんなことになってしまう。

500 Internal Server Error

このような事態を避けるために、ダウンロードした「.htaccess」はコピーして、別名で保存しておこう。仮にエラーになっても、別名で保存した「.htaccess」をすぐさまアップロードして「.htaccess」にリネームすれば、サイトは元の状態に戻る。

.htaccessをバックアップする

失敗しても慌てず騒がず、慎重に。

ユーザー名とパスワードは合っているはずなのに認証に失敗する、という場合は、.htaccessに記述した.htpasswdへのパスに間違いがあることが多いです。サーバーのエラーログを確認してみてください。

WEBのシステムを作ったり保守したりするSE/プログラマというものをしています。
ブログやってますがブロガーではありません。週末WEB随筆家です。
まろと呼んでください。
広告:XSERVER:350 x 160
スポンサーリンク

シェアしていただけるとうれしいです

フォローしていただけるとうれしいです