我有一個網站,只有具有管理員權限的用戶才能查看某些網頁。當我登錄登錄到我的管理員帳戶$_session["is_admin"] = true
已設置。然後在我希望只有擁有管理員權限的用戶才能查看的頁面上檢查is_admin是否爲true,否則我將它們重定向到索引頁面。有沒有更好的方法來保護特定的網頁?
if(!$_SESSION["is_admin"]){ //redirect to index.Php}
在這些情況下是否有更好的方法來保護網頁?
感謝
我有一個網站,只有具有管理員權限的用戶才能查看某些網頁。當我登錄登錄到我的管理員帳戶$_session["is_admin"] = true
已設置。然後在我希望只有擁有管理員權限的用戶才能查看的頁面上檢查is_admin是否爲true,否則我將它們重定向到索引頁面。有沒有更好的方法來保護特定的網頁?
if(!$_SESSION["is_admin"]){ //redirect to index.Php}
在這些情況下是否有更好的方法來保護網頁?
感謝
嚴格依靠$_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。
更多閱讀材料:
這是確定的,如果你只有管理員與非管理員用戶在訪問網頁的條款。 如果您擁有更多的用戶級別,您可以選擇實施角色。
如果代碼在某個地方不公開(在公共文件夾之上),那麼代碼更安全,因此發生問題更加困難。這裏發生了什麼?
</php
// Code
如果整個頁面位於公用文件夾中,它將以純文本顯示。雖然這很少見,但缺少一個php標記並不罕見,甚至在包含文件中(然後攻擊者可以直接訪問包含的文件)。
另外,看看這個其他SO question about session hijacking,它直接關係到你的問題。
編輯。我剛纔讀的facebook's Criticism Wikipedia page,是非常相關的,所以我引用它:
在2007年8月,用於生成的Facebook的主頁和搜索頁面的訪問者瀏覽網站的代碼被意外公開,根據領先的互聯網新聞站點。 Facebook服務器上的配置問題導致顯示PHP代碼而不是代碼應該創建的網頁,這引發了對網站上私人數據安全性的擔憂。
如果他們當天在其他地方問過,他們可能沒有被暴露。
這應該是罰款,只要你登錄腳本正確固定。如果安全性真的很重要,你也應該使用SSL(https)。 – Dave
確保在重定向後殺死腳本 – Musa
@musa你是如何殺死腳本的?在重定向將用戶帶到index.php頁面之後,在頁面加載後不會有任何腳本「死亡」? – crm