2013-04-25 145 views
0

我正在使用PHP構建自定義後端用戶控制面板。PHP自定義身份驗證方法

我在尋求如何最好地管理用戶身份驗證的建議。我寫了我自己的自定義註冊和登錄系統(我不打算使用基於服務器的身份驗證)。我的計劃是在用戶通過身份驗證後設置會話變量,然後使用它來允許/禁止訪問。

這是正確的方法還是這種不安全,我顯然希望防止可能試圖繞過認證的用戶,對於那些有效的用戶,我希望能夠限制某些數據,例如用戶4不應該看到用戶1,2或3的個人數據。

掩蓋/欺騙/欺騙PHP會話變量有多容易?

+0

*我不打算使用基於服務器的身份驗證* - 您是否指的是基於Apache的HTTP身份驗證?否則,該陳述沒有多大意義(什麼是基於客戶端的身份驗證?) – 2013-04-25 12:28:31

回答

3

會話是一個數據存儲在您的服務器上的變量。每個會話都包含一個將cookie連接到會話的唯一標識符(您存儲的數據)。當你沒有這個標識符時,你不能請求會話。

這裏唯一的安全問題是cookie可能被劫持。所以爲了更好的安全性,你需要檢查IP地址。

例如:

If($Login === true) 
    $Session['userData'] = array("IP" => "11.11.11.11", "UserID" => "5"); 

應具有以下檢查:

if($_SESSION['userData']['IP'] == $_SERVER['REMOTE_HOST']) { 
    /* do you checks and stuff. */ 
} else { 
    die("Session does not belong to you!"); 
} 

當你的IP檢查它幾乎是不可能的劫持會話cookie(或者你需要的相同的網絡和東西)

+0

當您執行IP檢查時,還會阻止來自特定代理或負載平衡器的訪問。 – 2013-04-25 12:29:24

+0

謝謝,我沒有意識到一個cookie被設置,在這種情況下,我可以清楚地看到它是特定的機器/設備,但我也喜歡IP檢查的想法,非常簡單和有效。 – 2013-04-25 12:37:25

0

PHP會話是爲每個用戶在登錄時提供唯一標識。所以當你創建一個會話時,它會爲每個登錄用戶生成不同的會話值。沒有會話重疊的機會。