我有從數據庫中獲得的書籍列表。當用戶選擇一本書時,我希望它能夠檢索該書的信息並將其顯示在屏幕上。但是,我想保留隱藏在客戶端的書的ID,那麼傳輸選定書的ID的最佳方式是什麼?我認爲我的大腦已經融化了,所以我可能錯過了一些明顯的東西。會話似乎是唯一沒有傳輸任何身份信息的方式,但我不知道如何實現一個系統,其中選擇了一個項目(從最適合的控制類型中選擇)並且以某種方式拾取項目的ID由服務器和相關信息檢索。 (使用ASP.NET + SQL Server)。 感謝您的任何意見從數據庫中獲取對象的詳細信息 - 保持ID安全
回答
您是否真的想隱藏用戶的數據庫ID,例如在用戶對數據庫有一些替代訪問權的情況下,並且您希望他以困難的方式搜索該書?
通常情況下,要求不是要保密ID的祕密,而是爲了防止用戶找出其他物品的ID(例如強制某個導航渠道到達某個物品)或與其他用戶共享該ID 。因此,例如可以有一個URL http://example.com/books/0867316672289
,其中0867316672289將向相同的訪問者呈現相同的書,但用戶無法繞過該值,因此0867316672288或0867316672290將着陸404s。它也可以要求另一個用戶進入0867316672289還得到了404
保持ID真正的「祕密」(即,將其存儲在會話,並具有會話狀態跟蹤的「當前書」)幾乎沒有增加超過上述方案的價值,只會使事情複雜化。
一個解決方案是使用站點密鑰對ID進行加密。從一個int ID中,您可以獲得一個16字節的加密塊(例如,如果使用了AES塊大小),可以在隨後的訪問中將其恢復爲原始ID。由於解決方案空間的巨大尺寸(16字節),訪問者無法猜測其他ID。如果您還想讓僞ID粘到用戶上,您可以使用特定的加密密鑰(例如派生自用戶ID)或將額外信息添加到僞ID中(例如,也加密用戶ID並檢查它在你的請求處理程序中)。
我不知道我理解你的問題,因爲答案似乎是太明顯了:只是不發實體的ID給客戶。在服務器端使用它來組成ASP.NET頁面,但不要在發送到客戶端的輸出頁面上包含id本身。
這是否有意義? :-)
如何爲每本書使用「僞ID」?我假設你在客戶端需要一些東西來告訴服務器客戶端選擇了哪本書。
爲每本書生成一個Guid作爲網頁端「僞ID」,這應該保持真實ID相當安全。
Guid's是一個可行的選擇,雖然不如remus的解決方案。事實上的GUID方案(其中微軟是一個實例)是膨脹和討厭產生。再加上它在數據庫中需要一個16字節(主鍵?)鍵條目;它還需要一個數據庫旅程來讓網絡服務器檢索狀態。我建議像Remus建議的可逆加密。 Blowfish是一種很好的(非常高效的)加密算法。 – 2009-12-01 01:14:08
似乎是一個或另一個。往返數據庫(一旦擁有密鑰後可能會發生)或解密。使用.Net創建Guid很簡單,這只是一個建議。您可以輕鬆生成一個隨機的4字節整數並使用它。聽起來像Guids正在進行的一些討厭。 – Moose 2009-12-01 01:55:45
Is exposing the IDs a risk?(SO question)
- 1. 如何從數據庫中獲取數據的詳細信息?
- 2. 保持數據庫信息安全
- 3. 如何從settings.py中獲取數據庫詳細信息
- 4. 如何在Linux中從DSN獲取數據庫詳細信息?
- 5. 從windbg中的clrstack輸出獲取對象詳細信息
- 6. 以數據庫爲源的詳細信息獲取詳細元素的數量
- 7. 在MySQL數據庫的ListView中獲取ListItem的詳細信息
- 8. 數據庫用戶詳細信息安全
- 9. 獲取短信的詳細信息從它的ID Android
- 10. 獲取Facebook詳細信息
- 11. 從ActivatedRouteSnapshot獲取路線詳細信息
- 12. 從照片中獲取詳細信息
- 13. CA拉力賽 - 如何獲取子對象的詳細信息,如從ProjectPermission獲得項目詳細信息
- 14. 根據WCS中的產品ID獲取產品詳細信息
- 15. 從RSS數據中的鏈接獲取詳細信息
- 16. Golang,mongodb:獲取數據庫錯誤的詳細信息/代碼
- 17. C#從子類獲取詳細信息
- 18. 從H2O模型對象獲取模型詳細信息
- 19. 如何獲取數據庫表的詳細信息
- 20. 如何從Android的SQLite數據庫列表視圖中獲取詳細信息
- 21. 從log.nsf獲取用戶詳細信息
- 22. 從MGTwitterEngine獲取用戶詳細信息
- 23. 從貝寶獲取詳細信息?
- 24. 從iPhone的音樂庫中獲取歌曲的詳細信息
- 25. 從數據庫容器(.dbc)讀取表詳細信息
- 26. PHP如何獲取Mysql數據庫詳細信息
- 27. 訪問JSON對象的詳細信息
- 28. 如何獲取線程鎖定對象的詳細信息
- 29. RDLC詳細信息對
- 30. 獲取json數據(從列表到詳細信息頁面)
會話ID是密鑰的另一個候選人。 – RickNZ 2009-12-01 04:48:53
謝謝,我想我會去加密。這些書不是爲了公開展示,而只適用於寫過它的人或作者邀請的人。因此,另一項檢查是爲了獲得許可而做的,但我試圖將內部工作暴露在最低限度。我喜歡加密的想法,因此可以將加密值存儲在隱藏字段中,所以我可以從用戶選擇書籍時檢索它。ID的值只是整數,所以猜測這不是太棘手, d喜歡通過只接受具有校正加密數據的格式良好的URL來添加額外的保護。 – keyboardP 2009-12-01 15:19:49