2013-12-13 88 views
0

只是一個關於基本安全的簡單問題。我相信這不是很好的安全措施,並且有辦法做更好的事情,但是我想知道這對基本安全是否合適,或者是否存在大問題。保護php頁面

我有一個(mysql)users表和type字段。大部分用戶都是「用戶」類型,但有些是「admin」類型。

如果我有一個網頁我想只有用戶輸入「admin」的訪問,它看起來像這樣($用戶是我與用戶的信息創建一個cookie):

<?php 
if($user['type'] == "admin"){ 

// PAGE CONTENTS HERE 

}else{ 

echo "Sorry, you don't have access to this page."; 

} 

?> 

是這個簡單的解決方案有什麼內在的錯誤?就像「用戶可以輕鬆獲得訪問權限......」?再次,我相信這不是一個好的解決方案,更多的層次對於真正的安全性是必要的,但我想確保它不是絕對可怕的解決方案。

編輯:多一點信息 - 我不在信用卡信息存儲在服務器或類似的東西。存儲的最敏感的數據是用戶的一些地址。有人未經授權訪問管理頁面肯定會對訂單和其他一些內容造成一些傷害,但它絕不會是世界末日。

+0

「用戶可以很容易地獲得訪問權限......」不,我不這麼認爲。 –

回答

8

是的,您使用Cookie的事實是錯誤的。 Cookies存儲在客戶端,可以進行操作。

您應該切換到會話,以便存儲在客戶端Cookie中的唯一信息是將訪問者連接到存儲在服務器端的會話信息的會話ID。

查看manual瞭解更多信息。

+1

+1!一開始沒有看到有關cookies的信息,我準備回答OP的「沒問題」!我的錯... :( – user2196728

2

As jeroen points outa user could easily gain access by just...編輯它們的cookie。

在現代瀏覽器中,您可以輕鬆編輯您的cookies。您可以在瀏覽器中看到您的Cookie - 例如 - 在谷歌瀏覽器中,您可以打開開發者工具(又名Inspect Element),然後查看Cookie(在資源標籤中),他們可以在那裏讀取他們所擁有的cookies的數據。

要實際修改cookie,他們可以在開發人員工具中從控制檯運行一個小腳本。他們所要做的就是編輯document.cookie。例如:

document.cookie = 'type = admin'; 

一個Attach可能會竊取合法用戶的存儲的cookie,並在你的機器設置。這使得攻擊者可以冒充一個有效的用戶,即使cookie中有加密的值,這種方法也可以工作。


解決方案是有一個cookie來存儲安全令牌。這是一個與機器相關的隨機加密安全隨機生成值,並具有到期日期(無論如何,Cookie都是正常的)。這意味着不會有猜測,並且客戶端也不能解密。

會話做了所有這些,所以使用會話。

儘管使用cookie有一定的價值,但最好使用這些令牌使每個請求無效(並生成一個替換它的新的令牌)。這緩解了跨站請求僞造。

注意:有些網站使用cookie來存儲未經過身份驗證的用戶的用戶首選項(例如首選語言)。

1

您應該將該值存儲在php會話中 - 然後cookie會存儲引用而不是值。

會話可以持久保存到文件系統或數據庫,具體取決於您的擴展需求。

不要忽視用於設置會話變量的代碼周圍的安全性。另外請注意,他們可以超時。