2010-03-10 105 views
2

我是PHP的新手,試圖讓我的頭腦安全。php:保護敏感頁面功能

我有一個管理頁面,可以訪問某些管理任務。現在,它允許您使用某些種子數據重新填充數據庫表。

要訪問管理頁面,您首先需要登錄。目前,登錄未通過https(即將推出)。

如果您進行身份驗證,則會將令牌寫入$ _SESSION中。在每個管理頁面中,都會檢查令牌。如果無效,該頁面將重定向到登錄頁面。

我的問題:

這是在PHP中「鎖定」下敏感的管理任務的正確方法?檢查$ _SESSION變量中的值?我還應該做些什麼?

回答

3

這幾乎是標準的做法。根據用戶數據庫/密碼文件/其他認證數據對用戶進行認證,將認證狀態存儲在會話變量中,並最終檢查每次用戶嘗試進行需要授權的操作時是否正確設置會話變量。

+0

酷豆。謝謝! – Alan 2010-03-10 09:14:06

1

會話ID通常作爲cookie存儲在客戶端。如果有人竊取cookie,他們可以劫持會話。即使您使用安全連接進行登錄,稍後,不安全的請求也會通過線路發送,並且無論加密通信如何,都可以使用任何XSS漏洞捕獲會話cookie。使用session_set_cookie_params來限制cookie發送到的頁面的子域和路徑。

您可以嘗試使用非欺騙性客戶端數據來檢測劫持。由於您無法控制協議,因此只有這樣的數據纔是遠程IP,儘管攻擊者可以在欺騙IP時進行盲目攻擊。但是,這並不能防止與有效用戶位於同一NAT後面的劫持程序,並且在代理請求方面存在問題。

你或許可以用HTTP digest access authentication解決一些問題。這是一種挑戰 - 響應身份驗證協議,因此可以在沒有協議級加密的情況下工作。但是,它基於已知弱點的MD5。考慮到挑戰的生命,這可能不是問題。摘要認證容易受到中間人攻擊。

1

如果您需要更細粒度的控制級別,您可以根據Access Control Lists查看角色。通過這種方式,通過身份驗證的用戶可以根據您提供的角色來授予或拒絕訪問應用程序的某些部分。這是常規密碼認證之外的附加安全措施。

如果您只有一位用戶,例如管理員,ACL雖然是矯枉過正。