PHPでBASIC認証のユーザー名を読みだす

  • 投稿 : 2016-01-30

BASIC認証のユーザー名をPHPで読みだす

.htaccessと.htpasswdでBASIC認証しているときに、PHPでそのユーザー名を読む方法

<?php
echo "User: ".$_SERVER['PHP_AUTH_USER'];
echo "<br/>";
echo "Pass: ".$_SERVER['PHP_AUTH_PW'];

$_SERVER['PHP_AUTH_USER']でユーザー名
$_SERVER['PHP_AUTH_PW']でパスワード
が読み取れる

PHPだけで、認証画面を出す方法

<?php
header('WWW-Authenticate: Basic realm="Enter username and password."');
header('Content-Type: text/plain; charset=utf-8');

PHPだけでBASIC認証することが可能です。
上記で、ブラウザとかがだす認証ダイアログを表示することが可能です。
「Enter username and password.」という文字も表示されるかと・・。

PHPだけで、BASIC認証

<?php
switch (true) {
    case !isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']):
    case $_SERVER['PHP_AUTH_USER'] !== 'admin':
    case $_SERVER['PHP_AUTH_PW']   !== 'test':
        header('WWW-Authenticate: Basic realm="Enter username and password."');
        header('Content-Type: text/plain; charset=utf-8');
        die('このページを見るにはログインが必要です');
}
header('Content-Type: text/html; charset=utf-8');
?>
<!DOCTYPE html>
<html>
...
</html>
引用元:PHPを利用したBasic認証の仕組み - Qiita

一番短くて、流れがわかりやすいと思います。
詳細は、引用元で・・。

>case !isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']):

ユーザー名とパスワードの変数に何も入っていない場合、つまり認証ダイアログでまだ認証していない状態

> case $_SERVER['PHP_AUTH_USER'] !== 'admin':
> case $_SERVER['PHP_AUTH_PW'] !== 'test':

ユーザー名「admin」パスワード「test」以外の時は

上記の時は、認証ダイアログをだすというロジックになってます。
上記外の時は、そのまま下のロジックに流れるので、したのロジックで表示すべき内容を書けばOKです。

BASIC認証は本当に平文でデータが流れてます

header('Authorization: Basic ' . base64_encode("{$username}:{$password}"));
PHPを利用したBasic認証の仕組み - Qiita

上記リンク先の解説が分かりやすいと思う。

参考

PHP: PHP による HTTP 認証 - Manual
BASIC認証とDigest認証、hydraによる辞書攻撃 - ろば電子が詰まっている
PHPでお手軽ダイジェスト認証 (Digest認証) - EC studio 技術ブログ
スポンサーリンク
タグ#PHP#code