HTTP Basic Authentication 可在無資料庫、無 Session 情況下保護特定頁面。PHP 透過 $_SERVER['PHP_AUTH_USER'] 與 $_SERVER['PHP_AUTH_PW'] 取得瀏覽器送來的帳密。本文示範完整實作與安全強化。
<?php
// 設定合法帳密(實務應從環境變數/設定檔讀取)
$validUser = 'admin';
$validPass = 'secret123';
if (!isset($_SERVER['PHP_AUTH_USER'])) {
// 瀏覽器未提供憑證,要求認證
header('WWW-Authenticate: Basic realm="Admin Area"');
header('HTTP/1.0 401 Unauthorized');
exit('需要有效憑證才能存取');
}
if ($_SERVER['PHP_AUTH_USER'] !== $validUser || $_SERVER['PHP_AUTH_PW'] !== $validPass) {
// 憑證錯誤,再次要求認證
header('WWW-Authenticate: Basic realm="Admin Area"');
header('HTTP/1.0 401 Unauthorized');
exit('帳號或密碼錯誤');
}
// 認證通過
echo "歡迎進入管理區域, {$_SERVER['PHP_AUTH_USER']}!";
?>
password_hash() 儲存雜湊,驗證用 password_verify()。
$hash = '$2y$10$...'; // password_hash('secret123', PASSWORD_DEFAULT)
if (!password_verify($_SERVER['PHP_AUTH_PW'], $hash)) { ... }
realm="Admin Area" 讓瀏覽器區分不同保護區域,避免憑證混用。HTTP Basic Auth 無標準登出 API,常見做法:
header('HTTP/1.1 401 Unauthorized');WWW-Authenticate: Digest 以挑戰-回應機制避免明文傳輸,但實作複雜,現代專案多改用 Token (JWT) 或 Session 認證。
HTTP Basic Auth 適合簡單內部工具、開發環境保護,生產環境必須配合 HTTPS、密碼雜湊、嘗試限制。希望本文對您的 PHP 程式設計有所幫助。