在數碼轉型年代,PHP 作為最常用的後端語言之一,其安全性至關重要。本文將從多角度深入探討如何建立安全的 PHP 應用程式,並提供實用技巧,助您抵禦常見攻擊、提升網站信任度。
一、輸入驗證與輸出過濾
首先,所有來自用戶的輸入必須經過嚴格驗證。無論是表單提交、URL 參數,還是 Cookie,都應使用 PHP 內建函式,如 filter_input() 和 filter_var() 進行類型及格式檢查。
避免直接使用 $_GET、$_POST 的原始值。
針對電子郵件、URL、數字等類型,採用對應過濾器。
其次,輸出到 HTML、JavaScript 或 SQL 時,必須採用正確的過濾或轉義:
HTML 輸出:使用 htmlspecialchars($str, ENT_QUOTES, 'UTF-8') 以防止 XSS(跨站腳本攻擊)。
SQL 查詢:務必使用 預處理語句(Prepared Statements)與佔位符(Placeholders),例如 PDO 的 prepare() 與 bindParam() 函式,杜絕 SQL 注入 風險。
二、使用安全的認證與授權機制
1. 密碼安全
採用 PHP 內建的 password_hash() 與 password_verify() 進行密碼儲存與比對,切勿使用 MD5 或 SHA1。
設定合理的 密碼複雜度 與 過期策略,並在資料庫中為每個用戶生成獨立的 salt。
2. 存取控制
採用 基於角色(RBAC)或 基於權限(PBAC)的授權機制,確保用戶只能執行被賦予的操作。
在每個請求初期檢查用戶權限,避免未授權操作。
三、防範常見網路攻擊
跨站請求偽造(CSRF)
在敏感動作(如修改密碼、轉帳)表單中使用 CSRF Token,並在伺服器端驗證。例如,生成唯一 token 存入 Session,再於表單隱藏欄位提交,核對不一致即拒絕請求。
檔案上傳安全
驗證檔案 MIME 類型與副檔名是否允許,並限制檔案大小。
將上傳檔案存放於網站根目錄之外,並於下載時透過程式讀取,避免直接執行。
錯誤與例外處理
關閉 PHP 生產環境的 display_errors,避免顯示敏感路徑或 SQL 語句。
自訂錯誤頁面,並在伺服器 Log 檔中詳實記錄錯誤訊息,輔助後續排查。
四、定期維護與安全更新
升級 PHP 版本:使用支援期內的最新 PHP 版本,享受官方安全修補。
依賴管理:採用 Composer 管理第三方套件,並定期執行 composer audit 及 composer update,修補已知漏洞。
安全掃描:引入自動化工具(如 OWASP ZAP、SonarQube)進行滲透測試與程式碼扫描,及早發現風險。
結論
建立安全的 PHP 應用程式並非一日之功,需要從輸入驗證、輸出過濾、認證授權,到防範各類攻擊,再到定期維護全面防護。只要遵循上述最佳實踐,並持續關注新興威脅,便能大幅降低資安風險,為用戶提供更可靠穩健的網站服務。