[英]How to secure this PHP form
我有一個用於編輯用戶的表單。 用戶ID被傳遞給客戶端(在隱藏字段中),以便我知道在將表單發回服務器時要更新的用戶。 我的問題是,如何防止用戶更改DOM中的ID,從而更新他們不應該訪問的記錄?
我能想到的唯一方法是:
還有其他方法嗎?
謝謝!
編輯:嘿,有一些很好的回應。請注意,登錄用戶和正在編輯的用戶可能是兩個不同的用戶,例如管理員正在編輯員工記錄。
執行此操作的最佳方法是在提交后檢查用戶是否有權編輯該用戶。
不要使用此數據污染會話,因為它可能會變得混亂,例如當用戶多次打開同一頁面時。
它在某種程度上取決於允許用戶編輯它的條件。
在它的核心,它歸結為:
驗證用戶通常是“用戶名和密碼匹配嗎?”的情況。 或“是否存在與其關聯的登錄用戶的活動會話?”
授權取決於您的業務邏輯。 它可能是“登錄用戶是否與正在編輯的用戶相同?” 或“正在編輯的用戶是否有一個包含登錄用戶ID的管理器字段?” 等等。
在第一種情況下,在會話中存儲用戶ID不應該是痛苦的。 在第二種情況下,您只需將數據庫查找作為您在腳本中執行的第一項操作之一。
您為什么依靠隱藏字段來了解要更新的記錄? 如果用戶已登錄,則您應該已在會話中擁有他的user_id。 因此,您可以通過查找登錄的用戶來查找要更新的記錄。
如上所述,對此進行排序的最快速,最輕松的方法是將USER_ID粘貼在會話期間。
評論說你用這些信息“污染”會話顯然沒有受過教育,忽略它們。
我在評論中注意到的另一件事是“檢查用戶是否有權編輯條目”這意味着存在某種分層系統,這似乎並非如此。
正如您所假設的那樣,會話存儲的替代方法是以某種方式模糊隱藏字段中的USER_ID值。 你可以加密它,或者代替整數ID - 你可以使用GUID但它有自己的含義,這使得某人難以“猜測”正確的GUID來處理記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.