【セキュリティ】ベーシック認証(Basic認証)について

セキュリティ

「Webサイトを、関係者だけに限定公開したいな….」
「ベーシック認証ってよく聞くけど、一体どんななんだろう….」

こんにちは!zepto(ゼプト)です。

今回は、ベーシック認証(Basic認証)について詳しく説明します。

この記事はこんな人にオススメです!

  • ベーシック認証について知りたい
  • セキュリティに興味がある
  • サイトを強固にしたい

では、早速やっていきましょう!!

はじめに

ベーシック認証(Basic認証)とは?

ウェブサイトにアクセスした際に「ユーザー名」と「パスワード」の入力を要求する
最も基本的な認証方法です。

Q. どんなメリットがあるの?
A. 手軽に導入できる
開発中のWebサイトや、社内向けページなど、
特定の人のみにアクセスを許可したい場合に、比較的簡単な設定で導入できます。

Q. デメリットや注意点はある?
A. 通信が暗号化されない
ユーザー名とパスワードは「Base64」という形式で変換されてサーバーへ送られますが、
これは暗号化ではないため、通信を盗聴されると簡単に解読されてしまう危険性があります。
そのため、機密情報を扱うサイトや高いセキュリティが求められる場面では、
通信自体を暗号化する「SSL/TLS(https)」と組み合わせるなどの対策が必須です。

確認方法

サイト上ではどのような表示になるのか、一緒に確認してみましょう!!
ベーシック認証を設定した場合、実際のウェブサイトでは、このような入力画面が表示されます。

「ユーザー名」と「パスワード」を正しく入力し、「ログイン」ボタンをクリックします。
認証が成功すると、保護されていたページが表示される仕組みです。

間違った情報が入力された場合、ダイアログの再表示、
あるいは「401 Authorization Required」などのエラーメッセージが表示されます。

通信の中身をのぞいてみよう!

それでは、ベーシック認証の裏側で、ブラウザとサーバーがどんな会話をしているのか具体的にみていきましょう。

①サーバーからの「認証情報を教えて!」という要求

まず、あなたがブラウザからベーシック認証が設定されているサイトへアクセスすると、サーバーから最初の応答(レスポンス)が返却されます。
この応答には、「WWW-Authenticate:Basic」という重要な情報が含まれています。
これは、サーバーがブラウザに対して、
サーバー:「もしもし、あなたはどなたですか? **『ベーシック認証』**という形式で身分証明書を見せてください」
と返信しているイメージです。
この要求を受け取ったブラウザが、あの入力画面を表示しているのです。

HTTP/1.1 401 Unauthorized
Server: nginx
Date: Fri, 21 Jul 2023 06:24:07 GMT
Content-Type: text/html
Content-Length: 2784
Connection: close
WWW-Authenticate: Basic realm="Member Site"
Last-Modified: Thu, 11 May 2023 05:31:20 GMT
ETag: "ae0-5fb644c668cb9"
<省略>

➁ブラウザからの「これが認証情報です」という返信

次に、あなたがユーザー名に「test」、パスワードに「password」を入力してログインボタンをクリックすると、今度はブラウザからサーバーへ情報(リクエスト)が送信されます。

このとき、ブラウザは以下のような情報を追加して送信します。
Authorization: Basic dGVzdDpwYXNzd29yZA==

これは、ブラウザがサーバーに対して、
ブラウザ:「はい、これが身分証明書です。どうぞ → dGVzdDpwYXNzd29yZA==
と返信しているイメージです。

GET / HTTP/1.1
Host: xxxxxxxxxx
Cookie: _ga=GA1.1.1930600641.1689907784; _ga_KDLJM75BPV=GS1.1.1689920393.2.0.1689920393.60.0.0; wordpress_test_cookie=WP%20Cookie%20check
Cache-Control: max-age=0
Authorization: Basic dGVzdDpwYXNzd29yZA==
Sec-Ch-Ua: 
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: ""
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.199 Safari/537.36

さて、この「dGVzdDpwYXNzd29yZA==」という、一見すると暗号に見える文字列。
これは、「ユーザー名」と「パスワード」を Base64 という方式で変換(エンコード)したものです。

実際にBase64をデコードしてみましょう。
Base64のデコードは下記のサイトを利用しておこないます。

このように、「ユーザー名」と「パスワード」がコロン(:)で区切られただけの文字列が丸見えになってしまいます。これが、ベーシック認証は通信を盗み見(盗聴)されると危険だと言われる最大の理由です。
Base64デコード後の文字列:「test:password

設定方法

今回は、エックスサーバーの管理画面を利用してWordPressにベーシック認証を追加します。
詳細については、こちらの参考記事をご確認ください。

エックスサーバーの管理画面へアクセス

まず最初に「Xserverレンタルサーバー」へアクセスします。

「メールアドレス」「パスワード」を入力後、「ログインする」ボタンをクリックします。

アクセス制限

トップページ 画面左メニューの「サーバー管理(サーバーパネル)」をクリックします。

サーバーパネル画面に切り替わったら、「アクセス制限」をクリックします。
※サイトで運営しているドメインの選択リンクをクリックします。

ここでベーシック認証を設定することができます。
下図のとおり、デフォルト設定では「アクセス制限OFF」となっています。

WordPressのフォルダ一覧の中で、管理画面に関連するファイルが格納されているのは「wp-admin」フォルダです。

「wp-admin」フォルダ内にある「ユーザー設定」をクリックし、ユーザーIDとパスワードを設定します。

設定値がベーシック認証時に必要な情報になるので忘れないようにしましょう!

ユーザー設定完了後、「wp-admin」フォルダのアクセス制限を「ON」に変更して「設定する」ボタンをクリックします。

これにより、wp-adminへのアクセスが制限され、ベーシック認証が有効になります。
制限をかけた状態での管理画面へのアクセスには、ユーザーIDとパスワードの入力が必要になります。

では、実際に管理画面へアクセスしてみましょう。
設定が適切におこなわれていれば、下図のとおりベーシック認証が有効になり管理画面へのアクセスが保護されます。

終わりに

今回は、ベーシック認証(Basic認証)についてお伝えしました。

ベーシック認証は、ウェブサイトに簡易的なセキュリティを追加するための手段として、広く利用されています。
しかし、ベーシック認証の場合、ユーザー名とパスワードはBase64でエンコードされて送信されているため、簡単に解読されてしまうことがデメリットになります。

セキュリティは非常に重要な要素であり、導入方法だけでなく、その仕組みや限界を理解することが重要です。この記事がベーシック認証の理解と導入の手助けになれば嬉しいです!

最後まで読んでいただき、ありがとうございました!!

コメント