2009-12-01 39 views
0

我有从数据库中获得的书籍列表。当用户选择一本书时,我希望它能够检索该书的信息并将其显示在屏幕上。但是,我想保留隐藏在客户端的书的ID,那么传输选定书的ID的最佳方式是什么?我认为我的大脑已经融化了,所以我可能错过了一些明显的东西。会话似乎是唯一没有传输任何身份信息的方式,但我不知道如何实现一个系统,其中选择了一个项目(从最适合的控制类型中选择)并且以某种方式拾取项目的ID由服务器和相关信息检索。 (使用ASP.NET + SQL Server)。 感谢您的任何意见从数据库中获取对象的详细信息 - 保持ID安全

回答

4

您是否真的想隐藏用户的数据库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并检查它在你的请求处理程序中)。

+0

会话ID是密钥的另一个候选人。 – RickNZ 2009-12-01 04:48:53

+0

谢谢,我想我会去加密。这些书不是为了公开展示,而只适用于写过它的人或作者邀请的人。因此,另一项检查是为了获得许可而做的,但我试图将内部工作暴露在最低限度。我喜欢加密的想法,因此可以将加密值存储在隐藏字段中,所以我可以从用户选择书籍时检索它。ID的值只是整数,所以猜测这不是太棘手, d喜欢通过只接受具有校正加密数据的格式良好的URL来添加额外的保护。 – keyboardP 2009-12-01 15:19:49

-2

我不知道我理解你的问题,因为答案似乎是太明显了:只是不发实体的ID给客户。在服务器端使用它来组成ASP.NET页面,但不要在发送到客户端的输出页面上包含id本身。

这是否有意义? :-)

+0

@downvoter:如果您downvote,意见是赞赏;它真的有助于了解人们的答案有什么问题。谢谢。 – CesarGon 2009-12-01 01:12:25

+1

哈希是单向映射,不能用作唯一键;你也可以执行分析来获得哈希和书签之间的对应 – 2009-12-01 01:17:34

+0

好吧,当然。这就是为什么我问我的答案是否有意义。客户端的实体标识要求在这个问题上是非常模糊的。我正在尝试在这里创建对话! :-) – CesarGon 2009-12-01 01:20:19

0

如何为每本书使用“伪ID”?我假设你在客户端需要一些东西来告诉服务器客户端选择了哪本书。

为每本书生成一个Guid作为网页端“伪ID”,这应该保持真实ID相当安全。

+0

Guid's是一个可行的选择,虽然不如remus的解决方案。事实上的GUID方案(其中微软是一个实例)是膨胀和讨厌产生。再加上它在数据库中需要一个16字节(主键?)键条目;它还需要一个数据库旅程来让网络服务器检索状态。我建议像Remus建议的可逆加密。 Blowfish是一种很好的(非常高效的)加密算法。 – 2009-12-01 01:14:08

+0

似乎是一个或另一个。往返数据库(一旦拥有密钥后可能会发生)或解密。使用.Net创建Guid很简单,这只是一个建议。您可以轻松生成一个随机的4字节整数并使用它。听起来像Guids正在进行的一些讨厌。 – Moose 2009-12-01 01:55:45

1

Is exposing the IDs a risk?(SO question)

+0

也许http://stackoverflow.com/questions/396164/exposing-database-ids-security-risk?在您的文章链接需要谷歌页面速度 – 2009-12-01 01:11:32

+0

谢谢,修复!在深夜回答的危险:) – orip 2009-12-01 05:27:21

+0

谢谢,那个线程是一个有趣的阅读。 – keyboardP 2009-12-01 15:22:46

相关问题