2013-04-14 331 views
4

我有一個網站,只有具有管理員權限的用戶才能查看某些網頁。當我登錄登錄到我的管理員帳戶$_session["is_admin"] = true已設置。然後在我希望只有擁有管理員權限的用戶才能查看的頁面上檢查is_admin是否爲true,否則我將它們重定向到索引頁面。有沒有更好的方法來保護特定的網頁?

if(!$_SESSION["is_admin"]){ //redirect to index.Php} 在這些情況下是否有更好的方法來保護網頁?

感謝

+2

這應該是罰款,只要你登錄腳本正確固定。如果安全性真的很重要,你也應該使用SSL(https)。 – Dave

+1

確保在重定向後殺死腳本 – Musa

+0

@musa你是如何殺死腳本的?在重定向將用戶帶到index.php頁面之後,在頁面加載後不會有任何腳本「死亡」? – crm

回答

2

嚴格依靠$_SESSION全球不是非常安全。有些應用程序能夠「劫持」會話並操作存儲在客戶端的會話。看看FireSheep

我會建議將實施某種類型的額外安全級別。額外的安全級別可能包括將IP地址列入白名單,或者在您的SESSION上短暫失效。

另請參閱is storing data in php session insecure(它不是相同的問題,但類似)。

白名單IP地址

由於mentioned in white list ip address for admin access,你可以繼續有權限訪問您的網頁的IP地址的記錄。如果IP地址不在允許的地址中,則拒絕訪問該頁面。您可以將地址存儲在數據庫中,或將它們硬編碼到腳本中(我會遠離硬編碼)。

這裏是zerkms在上面的鏈接採取,結合您的SESSION測試變形例:

$whitelist = array('192.168.0.1', '192.168.0.2'); 

if ($_SESSION['is_admin'] !== true || !in_array($_SERVER['REMOTE_ADDR'], $whitelist)) { 
    //Admin denied. 
    header('Location: denied.php'); exit(); 
} 

echo "You're an admin!" 

縮短會話失效時間

我建議你閱讀甘博的回答here

更多閱讀材料

+0

謝謝,你可以擴展你的兩個建議? – crm

+0

已更新的答案。 – noahnu

1

這是確定的,如果你只有管理員與非管理員用戶在訪問網頁的條款。 如果您擁有更多的用戶級別,您可以選擇實施角色。

3

如果代碼在某個地方不公開(在公共文件夾之上),那麼代碼更安全,因此發生問題更加困難。這裏發生了什麼?

</php 
    // Code 

如果整個頁面位於公用文件夾中,它將以純文本顯示。雖然這很少見,但缺少一個php標記並不罕見,甚至在包含文件中(然後攻擊者可以直接訪問包含的文件)。

另外,看看這個其他SO question about session hijacking,它直接關係到你的問題。

編輯。我剛纔讀的facebook's Criticism Wikipedia page,是非常相關的,所以我引用它:

在2007年8月,用於生成的Facebook的主頁和搜索頁面的訪問者瀏覽網站的代碼被意外公開,根據領先的互聯網新聞站點。 Facebook服務器上的配置問題導致顯示PHP代碼而不是代碼應該創建的網頁,這引發了對網站上私人數據安全性的擔憂。

如果他們當天在其他地方問過,他們可能沒有被暴露。

+0

錯字:<?而不是 noahnu

+0

@noahnu,這是我的觀點(; –

+1

哦,哈哈,我沒有真正讀過它,我的不好, – noahnu

相關問題