[英]PHP and .htaccess authentication solution
這是布局:
web root
- admin (dir)
- index.php
- js
- img
- other files / dirs
- dir
- files
到目前為止,我使用.htaccess passwd保護了管理員目錄,因為我希望對該目錄中的所有文件進行完全訪問控制(包括js腳本,jpg,pdf等)。 另一方面,我的自定義CMS使用PHP sesssion / cookie為其他URL提供身份驗證。 我想要完成的是對.htaccess受保護的目錄使用相同的PHP身份驗證,避免為已經過PHP身份驗證的用戶提供用戶/密碼的彈出提示。 綜上所述:
我讀過的大部分內容建議將管理目錄移到Web根目錄之外,並使用readfile從PHP腳本訪問文件,我不想這樣做。 這個目錄上有動態內容,還有靜態內容。 我知道apache會在加載任何資源之前觸發auth彈出窗口,所以問題是如何讓apache知道用戶已經過身份驗證。 還有其他建議/解決方法嗎?
您可以使用.htaccess文件中的SetEnvIf
變量來檢查是否設置了某個Cookie值。 例如(這不是很安全,但僅用於說明):
AuthType Basic
AuthName "Protected Login"
AuthUserFile "/path/to/.htpasswd"
AuthGroupFile "/dev/null"
SetEnvIf Cookie PHPSESSID=.* PASS=1
Order deny,allow
Deny from all
Allow from env=PASS
Require valid-user
Satisfy any
行SetEnvIf Cookie PHPSESSID=.* PASS=1
檢查Cookie是否設置了PHP會話ID,如果是,則足以Satisfy
身份驗證過程並且Allow from env=PASS
使其跳過登錄提示,如果這是真正。
同樣,這個例子不是很安全,因為在沒有成功的身份驗證嘗試的情況下調用session_start()
時已經設置了PHP會話cookie,因此最好設置一個難以猜測的更加密碼/隨機的cookie值。 例如:
SetEnvIf Cookie AJNC3Z921dmc4O8P2 PASS=1
這樣,如果您通過PHP成功驗證后設置了AJNC3Z921dmc4O8P2
的cookie值,這將足以通過身份驗證過程。 確保設置正確的cookie過期時間,以避免人們長時間通過登錄提示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.