2014-03-27 29 views
0

我們的數據庫具有主鍵整數。讓我們假設一個用例,其中有代表管理分配給他們的不同客戶的代表。一種情況是該代表可以更新客戶聯繫信息。我們的頁面通過id顯示聯繫信息。當代表按下更新時,它使用ID更新。如果代表更改了ID,這會引發安全問題,他們可以查看並更新其他客戶(可能不會分配給他們)的聯繫信息。我相信這是一個常見問題。按鍵更新(整數)安全問題

一種方法可能是在會話中保留一個密鑰,使用該密鑰對id進行加密並解密。有沒有更好的辦法?

另外,因爲對於不同的頁面必須做同樣的事情,我們可以在asp.net mvc中使用一種通用的方法嗎?

+0

您可以簡單地使用某種醃製。每次生成GUID,插入你的ID之間(但在特定的地方)。在發送時,使用這種鹽分。當你在查詢字符串中收到它時,拿出你的id並通過其他的東西。爲此,您可以編寫靜態類,供所有人使用。 –

+0

你能告訴哪些類來做到這一點嗎?謝謝。 – Jonna

回答

0

我想你是在查詢字符串中顯示ID,用戶可以改變它。首先不要那樣做。用戶敏感信息決不能作爲純文本傳遞到查詢字符串中。您可以使用加密來加密該ID,然後再檢索它。

+0

一旦散列值,您將無法檢索它。需要使用一些醃製或加密。 –

1

如果您有分配給他們客戶的代表,我假設您將這些信息以某種形式的訪問控制列表存儲在您的數據庫中,對嗎?

如果是這種情況,那麼您應該在服務器上強制用戶X有權查看/更改/刪除客戶Y.在GET/Edit/Customer/1和POST/Edit/Customer/1,你應該很好去。

既然你沒有顯示任何代碼或數據庫架構,我不能給你一個更具體的例子,但我希望我解釋我自己。

+0

這可能不是一種選擇方式,因爲客戶中有許多代表可以編輯的內容。比方說聯繫人,訂單等。要編輯聯繫人,url可能看起來像/ edit/customercontact?customerId = 1&contactId = 1。現在我們需要檢查聯繫人ID是否屬於客戶,客戶是否屬於正確的代表。同樣,如果還有一個級別,則很難驗證所有級別。我無法給出db schema,因爲這個例子是由我們的用例組成的,但非常相似。 – Jonna