簡體   English   中英

如何保護這個PHP表單

[英]How to secure this PHP form

我有一個用於編輯用戶的表單。 用戶ID被傳遞給客戶端(在隱藏字段中),以便我知道在將表單發回服務器時要更新的用戶。 我的問題是,如何防止用戶更改DOM中的ID,從而更新他們不應該訪問的記錄?

我能想到的唯一方法是:

  1. 在會話中保存用戶ID。 (痛苦)。
  2. 對用戶ID(可能還有其他表單元素)運行salted哈希,並將其作為隱藏表單元素包含在內。 (不是特別安全嗎?)

還有其他方法嗎?

謝謝!

編輯:嘿,有一些很好的回應。請注意,登錄用戶和正在編輯的用戶可能是兩個不同的用戶,例如管理員正在編輯員工記錄。

執行此操作的最佳方法是在提交后檢查用戶是否有權編輯該用戶。

不要使用此數據污染會話,因為它可能會變得混亂,例如當用戶多次打開同一頁面時。

它在某種程度上取決於允許用戶編輯它的條件。

在它的核心,它歸結為:

  1. 驗證用戶
  2. 檢查用戶是否有權進行更改

驗證用戶通常是“用戶名和密碼匹配嗎?”的情況。 或“是否存在與其關聯的登錄用戶的活動會話?”

授權取決於您的業務邏輯。 它可能是“登錄用戶是否與正在編輯的用戶相同?” 或“正在編輯的用戶是否有一個包含登錄用戶ID的管理器字段?” 等等。

在第一種情況下,在會話中存儲用戶ID不應該是痛苦的。 在第二種情況下,您只需將數據庫查找作為您在腳本中執行的第一項操作之一。

您為什么依靠隱藏字段來了解要更新的記錄? 如果用戶已登錄,則您應該已在會話中擁有他的user_id。 因此,您可以通過查找登錄的用戶來查找要更新的記錄。

如上所述,對此進行排序的最快速,最輕松的方法是將USER_ID粘貼在會話期間。

評論說你用這些信息“污染”會話顯然沒有受過教育,忽略它們。

我在評論中注意到的另一件事是“檢查用戶是否有權編輯條目”這意味着存在某種分層系統,這似乎並非如此。

正如您所假設的那樣,會話存儲的替代方法是以某種方式模糊隱藏字段中的USER_ID值。 你可以加密它,或者代替整數ID - 你可以使用GUID但它有自己的含義,這使得某人難以“猜測”正確的GUID來處理記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM