首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 實現文字檔加密與頁面存取限制完整教學

     編輯:PHP 綜合知識

前言

在網站開發中,常需要限制特定頁面僅允許特定用戶存取。最常見的做法是建立資料庫儲存帳號密碼,但對於簡單的專案或不想引入資料庫的情況,使用文字檔搭配 PHP 處理驗證是一個輕量且快速的替代方案。本文將詳細說明如何建立一個基於文字檔的密碼驗證機制,並進一步加入 MD5 雜湊加密提升安全性。

一、基本架構規劃

整個流程包含三個核心部分:

  1. 前端表單:提供密碼輸入框與送出按鈕,將使用者輸入以 POST 方式送往 PHP 處理頁。
  2. PHP 驗證邏輯:讀取儲存密碼的文字檔,比對使用者輸入,通過則導向受保護頁面,失敗則顯示錯誤訊息。
  3. 密碼文字檔:儲存明文或加密後的密碼,供 PHP 讀取比對。

二、建立前端登入表單

建立一個簡單的 HTML 表單,重點在於 method="post" 以及 action 指向處理驗證的 PHP 檔案(例如 restricted.php)。

<form name="passwordForm" method="post" action="restricted.php">
  <p>Password: <input type="password" name="password"> <input type="submit" name="Submit" value="Login"> </p>
</form>

三、撰寫 PHP 驗證核心程式

1. 讀取儲存的密碼

使用 fopen()、fread()、fclose() 三個檔案函數讀取密碼檔內容。

$fileloc = "/apachesite/docs/pass.txt"; // 密碼檔路徑
$filetoread = fopen($fileloc, "r") or die("Could not open password file");
$storedpass = fread($filetoread, filesize($fileloc)) or die("Could not read stored password");
fclose($filetoread);

2. 取得使用者輸入並比對

透過 $_POST["password"] 取得表單傳來的密碼,依序檢查:是否為空、是否與儲存密碼相符。

$password = $_POST["password"];

if (empty($password)) {
    die("No password entered");
} elseif ($password != $storedpass) {
    die("Password Incorrect");
} else {
    header("Location: securepage.htm");
}
注意:若出現 Cannot modify header information 錯誤,請在 php.ini 中將 output_buffering 設為 On,或確保在輸出任何內容前就呼叫 header()。

四、加入 MD5 雜湊加密強化安全性

明文儲存密碼風險極高,建議將密碼以 MD5 雜湊後再寫入文字檔。驗證時同樣將使用者輸入做 MD5 後再比對。

1. 產生加密密碼並寫入檔案

先在程式中暫時註解比對邏輯,改用 echo md5($password); 取得雜湊值,複製該字串存入 pass.txt,完成後再還原比對程式碼。

2. 修改比對邏輯

$md5password = md5($password);

if (empty($password)) {
    die("No password entered");
} elseif ($md5password != $storedpass) {
    die("Password Incorrect");
} else {
    header("Location: securepage.htm");
}

由於空字串經 MD5 仍會產生 32 位元雜湊值,因此 empty($password) 判斷必須放在加密之前,避免誤判。

五、部署與測試步驟

  1. 準備 Apache + PHP 環境(建議使用 XAMPP、WAMP 或手動安裝)。
  2. 建立 pass.txt 放置於 PHP 檔同目錄,內容為明文或 MD5 密碼。
  3. 以瀏覽器開啟表單頁面,輸入正確密碼應成功導向受保護頁面;錯誤密碼則顯示對應訊息。

六、優缺點總結與適用情境

優點缺點
程式碼極少、無需資料庫、部署快速安全性較低、無法支援多用戶/角色管理、密碼需人工分發

適合:內部測試頁面、簡單的靜態網站區塊保護、臨時性存取控制。不適合:高安全性需求、大量用戶管理、需記錄存取日誌的系統。

七、延伸應用建議

  • 加入 sleep(2) 延遲或失敗次數鎖定,防禦暴力破解。
  • 使用 password_hash() / password_verify() 取代 MD5,符合現代最佳實務。
  • 搭配 Session 機制,登入成功後設定 $_SESSION['auth'] = true,在受保護頁面檢查 Session 而非單純依賴導向。

透過本文的完整範例,您可以在幾分鐘內為網站加上基本的密碼保護層。雖然無法取代完整的會員系統,但在輕量級需求下是極佳的快速解決方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved