2012-01-11 203 views
2

我試圖決定在我的PHP網站會話管理的安全級別。在每個頁面的頂部是一個PHP標籤,我跑PHP會話和安全

if (!isset($_SESSION["user"])) {header('Location: login.php');} 

用戶會話在登錄時創建的,你們認爲這是足夠安全?整個網站運行在SSL。

+0

如果我發送了一個虛假的會話與我的請求,你是否使用其他驗證而不是這個,以確保我不能像任何人一樣登錄? – 2012-01-11 07:20:56

+0

這在技術上是錯誤的,它會產生一個警告,如果它們被啓用,它應該是'if(array_key_exists('user',$ _SESSION))' – Geoffrey 2012-01-11 07:34:57

回答

2

好,是安全有不同的主題100的......但在你想達到什麼樣的條件,是的,我認爲這很好

我會添加一些額外的驗證,以檢查$ _SESSION [「用戶']肯定是一個正確的用戶,並嘗試比較會話用戶的IP地址,USER AGENT和其他東西來檢測Session Hi-Jacking

你也應該退出; (「:X位置」):頭之後

header("Location: xyz.php"); 
exit; 
2

是的,這將工作。爲了減少錯誤發生,將該片段放在一個文件中,並將其包含在每個頁面的頂部。這樣你只需編輯一個地方來改變邏輯。

此外,根據RFC規範,您的位置標題應包含以https:開頭的整個URL。它可能仍然適用於某些瀏覽器,但不應該依賴。

0

我認爲這是更好地當你的用戶需要登錄到你的網站創建一個隨機字符串令牌。然後在您以前的代碼旁邊的每一頁中檢查它。我用$_SERVER['REMOTE_ADDR'],$_SERVER['HTTP_USER_AGENT']和一個隨機字符串來製作它。

+0

它並不總是一個好主意,因爲有些人使用REMOTE_ADDR後面的負載平衡代理(政府辦公室),導致他們在IP地址瀏覽時跳轉。 – Geoffrey 2012-01-11 07:34:23

0

那麼,至少每次加載一次,您還需要驗證用戶,否則您只是檢查會話是否存在。