【PHP】Basic認証が行われているページへのリクエスト方法

こんにちは、技術部のTです。
今回は、「Basic認証が行われているページへのリクエスト方法」について書かせていただきます。




目次

  1. はじめに
  2. Basic認証とは
  3. リクエスト方法①
  4. リクエスト方法②
  5. おわりに

参考




1. はじめに

セキュリティ対策の一つとして、開発環境や検証環境にBasic認証を取り入れているところが多いと思います。
ただ、リクエスト送信やリダイレクトさせたりする際、Basic認証にに引っ掛かりエラーが表示され、上手くできないことがありました。
今回は、クリアする方法を2つ書きたいと思います。




2. Basic認証とは

クリアする方法を書く前に、Basic認証について簡単に記載します。
Basic認証とはWeb上で利用できる認証システムです。
Basic認証が設定されているページへアクセスすると、ポップアップが表示され、 そこに前もって設定してあったIDとパスワードを入力することで、ログインすることができます。
適切な入力ができないかぎり認証されず閲覧不可はできません。
間違った情報を入力した場合はダイアログの再表示、あるいは「アクセスしようとしたページは表示できませんでした。」「401 Authorization Required」などのエラーメッセージが表示されます。
ただし、セキュリティのレベルとしては非常に低いものになるので、「あくまでも取り急ぎの認証である」ということに注意が必要です。


Basic認証はディレクトリごとのアクセス制限が可能です。
例えば、下記のようなディレクトリ構造のサイトがあるとします(※あくまでサンプル)。

				
					www.sample.com
∟www.sample.com/test01/
∟www.sample.com/test01/page01.html
∟www.sample.com/test01/page02.html
∟www.sample.com/test02/
∟www.sample.com/test02/page01.html
∟www.sample.com/test02/page02.html

				
			

このサイトの中で、www.sample.com/test01/というディレクトリにBasic認証を設定した場合、 /test01/内に含まれるページには全てBasic認証がかかります。
しかし、/test02/のディレクトリ階層には認証設定がされていないので、認証をすることなくページを見ることが可能です。



3. リクエスト方法①

1つ目の方法は、URLにIDとパスワードを含める方法です。

				
					'https://userid:password@sample.com/test01/page01.html'
				
			

ただ、URLにIDとパスワードを直接書くのは、あまりおすすめできません。



4. リクエスト方法②

2つ目の方法は、Basic認証のheaderを送信する方法です。

				
					define('SAMPLE_ID', 'userid'); // IDです
define('SAMPLE_PW', 'password'); // パスワードです
define('URL', 'https://sample.com/test01/page01.html');

$opts = [
    'http' => [
        'method' => 'GET',
        'header' => 'Authorization: Basic ' . base64_encode(SAMPLE_ID . ':' . SAMPLE_PW)
    ]
];

$data = file_get_contents(URL, false, stream_context_create($opts));

				
			

この方法なら、URLにID・パスワードを書く必要はありません。定数としてまとめて定義しているものを読み込めば同じファイルに書く必要もないので、1つ目に書いた方法よりはセキュリティ的にも安心です。




5. おわりに

最後までお読みいただきありがとうございます。
今回は、「Basic認証が行われているページへのリクエスト方法」について書かせていただきました。
このブログで少しでも理解が深まれば嬉しいです!

スーパーソフトウエアの採用情報

あなたが活躍できるフィールドと充実した育成環境があります

blank
blank