我有从数据库中获得的书籍列表。当用户选择一本书时,我希望它能够检索该书的信息并将其显示在屏幕上。但是,我想保留隐藏在客户端的书的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. 获取ID并显示详细信息
- 7. 如何从android数据库获取详细信息?
- 8. 以数据库为源的详细信息获取详细元素的数量
- 9. 在MySQL数据库的ListView中获取ListItem的详细信息
- 10. 数据库用户详细信息安全
- 11. 获取短信的详细信息从它的ID Android
- 12. 获取Facebook详细信息
- 13. 从ActivatedRouteSnapshot获取路线详细信息
- 14. 从照片中获取详细信息
- 15. CA拉力赛 - 如何获取子对象的详细信息,如从ProjectPermission获得项目详细信息
- 16. 根据WCS中的产品ID获取产品详细信息
- 17. 在Codeigniter中获取数据库详细信息表database.php页面
- 18. 从facebook获取用户详细信息
- 19. 从RSS数据中的链接获取详细信息
- 20. 转换数据库的详细信息,以JSON对象
- 21. Golang,mongodb:获取数据库错误的详细信息/代码
- 22. C#从子类获取详细信息
- 23. 从H2O模型对象获取模型详细信息
- 24. 如何获取数据库表的详细信息
- 25. 如何从Android的SQLite数据库列表视图中获取详细信息
- 26. 从google地方获取详细信息
- 27. 从log.nsf获取用户详细信息
- 28. 从贝宝获取详细信息?
- 29. 从MGTwitterEngine获取用户详细信息
- 30. 从iPhone的音乐库中获取歌曲的详细信息
会话ID是密钥的另一个候选人。 – RickNZ 2009-12-01 04:48:53
谢谢,我想我会去加密。这些书不是为了公开展示,而只适用于写过它的人或作者邀请的人。因此,另一项检查是为了获得许可而做的,但我试图将内部工作暴露在最低限度。我喜欢加密的想法,因此可以将加密值存储在隐藏字段中,所以我可以从用户选择书籍时检索它。ID的值只是整数,所以猜测这不是太棘手, d喜欢通过只接受具有校正加密数据的格式良好的URL来添加额外的保护。 – keyboardP 2009-12-01 15:19:49