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

セキュリティ

ベーシック認証について詳しく知りたい!と思っているあなた。
こんにちは。zepto(ゼプト)です。

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

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

  • ベーシック認証について知りたい人
  • セキュリティに興味がある人
  • サイトに簡易的なセキュリティを追加設定したい人

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

はじめに

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

ベーシック認証とは、ウェブサイトにアクセス時にユーザー名とパスワードを要求する、最も基本的な認証方法になります。

メリットは、ウェブサイトに簡易的なセキュリティを追加するための手段として、広く利用されているため、開発中のウェブサイトや、特定の人のみにアクセスを許可したい場合などには、比較的に簡単に導入できる点になります。

デメリットは、データを暗号化しているわけではなくBase64でエンコードされて送信されるため、攻撃者に盗聴された場合に簡単にデコード(解読)されてしまう可能性があります。(詳しくは??で)
その他、シングルサインオン認証のように複数のサーバをまたいだ認証ができないといったことが挙げられます。

機密情報を扱うウェブサイトや高度なセキュリティが求められる場合には、SSL/TLSといった通信の暗号化やより高度な認証方法を併用することを推奨します。

確認方法

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

ユーザー名」と「パスワード」を入力し、「ログイン」ボタンを押下することによって、正しい情報を入力した場合、本来のページが表示される仕組みになります。

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

設定方法

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

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

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

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

アクセス制限

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

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

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

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

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

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

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

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

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

リクエスト/レスポンス

ベーシック認証が設定できた上でより具体的にベーシック認証時の通信の中身を確認してみましょう。

①ベーシック認証が設定されているサイトへアクセス(初回レスポンス)

ブラウザからベーシック認証が設定されているサイトへアクセスした場合、下記レスポンスが返却されます。
中身を見ると「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」ヘッダで情報を渡されています。
Base64でエンコードされたユーザー名およびパスワードがされます。

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

終わりに

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

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

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

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

コメント