2012-08-29 105 views
0

用戶故事:

我是Web應用程序的管理員,我需要刪除Web應用程序的另一個用戶。我從用戶列表中選擇用戶,然後可以從後續頁面中刪除用戶。

電流(錯誤)解決方案:

現在我保存在一個隱藏的表單元素用戶要被刪除的ID /主鍵(太可怕了,太可怕了,太可怕了,我知道 - 有人可以使用元素檢查器刪除任何用戶...)。什麼是這樣的最佳做法?我是否將要刪除的用戶ID /主鍵保存爲$ _SESSION變量?一塊餅乾?一個哈希URL並用$ _GET獲取它?

編輯

有不同的用戶組,由不同的管理員來管理。 A組的管理員不知道B組(以及它的用戶)等。所有用戶都在一個表中,所有用戶都可以在任意數量的組中。我需要保護用戶的ID並將其從DOM中刪除,以便有人不能修改它並刪除沒有管轄權的用戶。

+1

「有人可以刪除與元素督察的用戶」 ---爲什麼你的管理部分沒有固定? – zerkms

+4

如果'刪除'頁面得到了充分的保護,只有你有權訪問它,那麼隱藏的表單字段就沒問題 - 畢竟,你在竊取你自己的字段沒有意義。 –

+0

我假設你是以管理員身份登錄的?你不能從你自己的$ _SESSION中檢查你是否是登錄用戶,只有「then」允許刪除腳本? – darma

回答

1

對於這樣的任務,沒有必要使用$_SESSION:會話用於維護頁面之間的狀態,這裏沒有這種情況。

處理資源[如用戶]時的最佳做法是設置RESTful environment

雖然你還沒有建立這樣的系統還沒有,你仍然可以利用HTTP請求與$_GET$_POST PHP數組:

<form action="delete.php" method ="post"> 
    <select id="user" name="user"> 
     <option value="1">Joh Doe</option> 
     <option value="2">Jane Doe</option> 
     <option value="3">Dun No</option> 
    </select> 
    <input type="submit" value="Submit"/> 
</form> 

當您提交此表,你犯了一個POST請求delete.php,並且$_POST數組將包含一個帶有選定值的user密鑰 - 然後您可以使用PDO準備的語句通過此密鑰刪除用戶。

針對拒絕刪除權限,您必須設置您的腳本以阻止請求,如果登錄的用戶沒有足夠的權限 - 這是您必須正確設置的另一個層,因此我建議您使用框架[如Symfony或YII],以便您可以利用其安全組件。

隱藏的領域理念落後於CSRF protection,所以它毫無意義 - 是的它依賴於會話。

+0

感謝您回答有關'$ _SESSION'的問題並提供瞭如此詳盡的答案。我也會研究REST。 – nulluser

0

會話沒有錯。會話用於存儲多於一頁的臨時時間。

1

我只是確保在刪除用戶時驗證用戶權限。

很好寫,例如函數isUser()用於檢查session/cookies中的數據,如果您被嵌入,則返回true,然後您還可以訪問var,以聲明用戶權限。另外,當你檢查你的數據是否正常,並且你實際登錄了正確的數據時,你可以創建$ user_rights var,其中包含訪問級別(等等)。

然後簡單:

if(isUser() and $user_rights == 9) { /* code here, 9 is e.g. admin right */ }