はじめに
Basic認証は、ウェブサイトやアプリケーションへのアクセスを制限するためのものです。この記事では、Basic認証の基本的な概念、実装の仕方、セキュリティ上のポイントについて詳しく解説します。
Basic認証とは?
Basic認証とは、HTTPプロトコルの一部であり、Webサーバーが特定のリソースにアクセスしようとするクライアントに対して、ユーザー名とパスワードを要求して認証を行う仕組みです。
HTTPプロトコルの初期のバージョンでは、セキュリティの考慮があまりなされておらず、特にパスワードなどの機密情報がプレーンテキスト(暗号化されていない、通常のテキスト形式のデータや情報)で送信されることが多くありました。このような状況を改善し、クライアントとサーバーの間でセキュアな通信を実現するために、HTTPの認証機能が導入されました。
Basic認証は、その最も初期の基本的な(basic)認証方法の一つです。最もbasicな認証方法であるがゆえに、認証情報は暗号化されていないプレーンテキストのままで送信されるため、セキュリティ上のリスクがあるとされています。
より高度なセキュリティが求められる場合は、他の認証方法やHTTPSと組み合わせることが推奨されています。
実務経験でBasic認証を実装した2つのパターン
WordPressの管理画面ログインページへのアクセスに対して、Basic認証を実装
管理画面ログインページへのアクセスに対して、Basic認証を実装することで、通常の管理画面へのログインと合わせてもう一段階ログイン認証が増えるため難しいパスワードにすればセキュリティがより強くなります。
サイト公開前のテスト環境のページ全体へのアクセスに対してBasic認証を実装
サイトを公開する前の確認用でテスト環境のページ全体へのアクセスに対してBasic認証を実装し、パスワードを知っている人のみアクセスができるようにします。
Basic認証の設定について
ユーザー名とパスワードを作成する
下記のようなパスワード生成ツールで「ユーザー名」と「パスワード」を生成します。
パスワード生成(パスワード作成)するweb・ウェブ制作に役立つ便利ツール。お好みのパスワードを生成(自動作成)することが…
.htpasswdファイルを作成して本文を生成する
生成された「ユーザー名」「パスワード」を下記「htpasswdジェネレーター」に入力して生成された文字列を.htpasswd
ファイルに貼り付けます。
例 ユーザー名「12345」パスワード「password」、アルゴリズムは「MD5」で「暗号化」をすると
「12345:$apr1$3EsEJJs4$EHlEiiMq2M.AKdQlsFDaL1」という文字列が生成されるので.htpasswd
ファイルに貼り付けてください。
.htpasswdファイルをサーバーのウェブ公開ディレクトリ(ドキュメントルート)より外に設置する
.htpasswd
ファイルをウェブ公開ディレクトリの外に設置する方法が一般的です。これにより、ウェブサイトの一般的なファイルにはアクセスできますが、.htpasswd
ファイルへの直接アクセスは制限されます。
例えば、ウェブサイトの公開ディレクトリが /var/www/html
である場合、.htpasswd
ファイルを /var/www
などのウェブ公開ディレクトリの外に設置することが考えられます。
.htaccessファイルにBasic認証用の記述を追加する
WordPressの管理画面のログインページへのBasic認証
<Files wp-login.php>
AuthType Basic
AuthUserFile /.htpasswdファイルまでのフルパス/.htpasswd
AuthGroupFile /dev/null
AuthName "入力してください。"
require valid-user
</Files>
ページ全体へのBasic認証
AuthType Basic
AuthUserFile /.htpasswdファイルまでのフルパス/.htpasswd
AuthGroupFile /dev/null
AuthName "入力してください。"
require valid-user
フルパスの取得について
サーバーによってはメニューから調べることができますが、わからない場合は下記.fullpath.php
を作成しサーバーにアップロードしてからアクセスして確かめてみてください。
ウェブ公開ディレクトリにアップロードにした場合下記にアクセスすると確認ができるので、.htpasswd
ファイルまでのパスを逆算して取得し、.htaccess
ファイルに記載してください。
https://example.com/fullpath.php
fullpath.php
<?php echo __FILE__; ?>
うまくいけばアクセスした時に下記のように「ユーザー名」と「パスワード」の入力要求画面が表示がされるはずです。
サーバーのメニューから設定
.htaccessファイルと.htpasswdファイルから設定するのが難しいと思う方は、
サーバーのメニューからBasic認証の設定をすることができます。
代表的なサーバーのBasic認証の設定方法のリンクを紹介します。
下記サーバーのさくらインターネット以外はアクセス制限を設定したいディレクトリを選択し「ユーザー名」「パスワード」を入力するだけのシンプルな設定ですが、さくらインターネットはファイルマネージャーにアクセスして設定する必要があります。
xserverの場合
レンタルサーバー「エックスサーバー」のご利用マニュアル|ご希望のフォルダに対してBASIC認証を設定できる「アクセス制限…
ロリポップサーバーの場合
ConoHa Wingサーバーの場合
ConoHa WINGのご利用ガイド、よくある質問などの各種サポート情報をご案内しています。ConoHa WINGは便利…
さくらインターネットサーバーの場合
このマニュアルでは、ファイルマネージャーから「アクセス制限」や「インデックスファイルの設定」する手順についてご案内してい…
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
まとめ
Basic認証で一段階ログイン認証を増やしたり、パスワードを知っている人のみが閲覧できる環境を構築することが容易にできるが、最もbasicな認証であるがゆえに、セキュリティが弱い部分もあったり、WordPressの会員サイトへの実装は向いていないなどの欠点もあるため、Basic認証はあくまでも簡易的な認証であることは知っておく必要があります。
他のセキュリティ関連の記事
クリックジャッギング攻撃とは、ウェブサイト内のコンテンツを透明なフレームや不可視のフレームに表示し、ユーザーが意図しないクリックを引き起こす攻撃手法です。クリックジャッギング攻撃を防ぐためには、適切なセキュリティーヘッダーの設定が必要です。
ブルートフォースアタックの仕組みや危険性、対策方法に解説しています。ブルートフォースアタックによる攻撃でパスワードが突破できる時間のパスワードの文字数による変化を計算式を用いて示しています。