2009-11-12 69 views
4

我正在處理ASP.NET MVC中的一個典型的CRUD應用程序,其中將有多個用戶帳戶,每個用戶帳戶都有多個項目。保護ASP.NET MVC中的URL上的ID

當用戶正在編輯項目時,他們將在URL上執行此操作,例如/edit/5,其中數字表示數據庫中行的ID。

我對一個用戶簡單地將ID更改爲另一個用戶的項目的ID並能夠更改它有一些擔憂。爲了保護ID,下面的解決方案已經發生在我身上:

  1. 進行加密,這樣就不能輕易改變 - 但是我當然有代碼每次回發到解密。
  2. 更改數據庫模式,以便在ID旁邊也生成GUID,並在URL中使用該GUID。
  3. 保留可讀ID作爲是幷包括已登錄用戶的用戶ID中的查詢的項,以便查詢看起來像:

    database.Items.SingleOrDefault(C => c.UserID == [當前登錄in user ID] & & c.ID == itemID);

也許有更好的方法或我沒有想到的方法。您希望避免這個問題的首選方法是什麼?

回答

9

絕對是第三種解決方案。從加密的 cookie(參見FormsAuthentication)獲取已登錄的用戶標識,並在SQL查詢中使用它來驗證該項目是否屬於該用戶。

+2

我同意。您應該確保該用戶有權編輯該項目。 – pattersonc 2009-11-12 16:09:29

5

永遠不要信任用戶輸入,總是檢查它是否有權訪問它。

0

將用戶標識存儲在會話集合中。