【问题标题】:Get details of object from database - keep ID secure从数据库中获取对象的详细信息 - 确保 ID 安全
【发布时间】:2009-12-01 13:27:04
【问题描述】:

我有一个从数据库中获得的书籍清单。当用户选择一本书时,我希望它检索该书的信息并将其显示在屏幕上。但是,我想对客户端隐藏书籍的 ID,那么传输所选书籍 ID 的最佳方法是什么?我想我的大脑已经融化了,所以我可能遗漏了一些明显的东西。会话似乎是不传输任何 ID 信息的唯一方法,但我不确定如何实现一个系统,在该系统中选择项目(从最适合的控件类型)并且以某种方式获取项目的 ID由服务器和相关信息检索。 (使用 ASP.NET + SQL Server)。 感谢您的任何建议

【问题讨论】:

    标签: asp.net sql-server security session


    【解决方案1】:

    您是否真的想对用户隐藏数据库 ID,例如在用户对数据库有一些备用访问权限并且您希望他以艰难的方式搜索图书的情况下?

    通常要求不是对 ID 保密,而是防止用户找出其他项目的 ID(例如,强制执行某个导航渠道以到达项目)或与其他用户共享 ID。因此,例如可以有一个 URL http://example.com/books/0867316672289 ,其中 0867316672289 会将 same 书呈现给同一访问者,但用户无法查看该值,因此 0867316672288 或 0867316672290 将登陆 404s。可能还需要另一个用户输入 0867316672289 也获得 404。

    保持 ID 真正“秘密”(即,将其存储在会话中并让会话状态跟踪“当前书籍”)与上述方案相比几乎没有什么价值,只会使事情复杂化。

    一种解决方案是使用站点密钥对 ID 进行加密。从一个 int ID,您可以得到一个 16 字节的加密块(例如,如果使用 AES 块大小),站点可以在后续访问时将其还原为原始 ID。由于解决方案空间(16 字节)的巨大大小,访问者无法猜测其他 ID。如果您还想让伪 ID 对用户具有粘性,您可以使加密密钥特定于用户(例如,从用户 ID 派生)或在伪 ID 中添加额外信息(例如,同时加密用户 ID 并检查它在您的请求处理程序中)。

    【讨论】:

    • 会话 ID 是密钥的另一个候选者。
    • 谢谢,我想我会去加密。这些书不公开展示,只提供给作者或作者邀请的人。因此,又进行了一次许可检查,但我试图将内部工作的暴露降至最低。我喜欢加密的想法,因此可以将加密的值存储在隐藏字段中,这样我就可以在用户选择一本书时检索它。ID 只是整数,所以猜测这不是太棘手,但我希望通过仅接受具有更正加密数据的格式正确的 URL 来增加额外的保护。
    【解决方案2】:

    Is exposing the IDs a risk?(所以问题)

    【讨论】:

    【解决方案3】:

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

    为每本书生成一个 Guid 以用作 Web 端的“伪 id”,这应该使真实 id 相当安全。

    【讨论】:

    • Guid 是一个可行的选择,虽然不如 remus 的解决方案。事实上的 GUID 方案(其中 microsoft 是一个实例)是臃肿且难以生成的。另外,它在数据库中需要一个 16 字节(主?)的密钥条目;它还需要网络服务器访问数据库以检索状态。我建议像 Remus 建议的那样进行可逆加密。 Blowfish 是一种很好(非常有效)的加密算法。
    • 似乎是其中之一。往返数据库(一旦您拥有密钥,这可能无论如何都会发生)或解密。使用 .Net 创建 Guid 很简单,这只是一个建议。您可以轻松地生成一个随机的 4 字节整数并使用它。听起来像是对 Guids 的一些仇恨。
    【解决方案4】:

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

    这有意义吗? :-)

    【讨论】:

    • @downvoter:如果您投反对票,欢迎发表评论;它确实有助于了解一个人的答案有什么问题。谢谢。
    • 哈希是单向映射,不能用作唯一键;还可以通过分析得到hash和book-id的对应关系
    • 嗯,当然。这就是为什么我要问我的回答是否有意义。问题中客户端对实体识别的要求比较模糊。我正在尝试在这里创建对话! :-)
    • 这个问题是 ASP.NET 页面如何知道使用哪个书籍 ID 来生成页面或页面上的图像? (我不是反对者!)
    • 感谢您的回复,但我不明白这是如何工作的。即使我使用哈希,服务器如何知道要测试哪个哈希?
    猜你喜欢
    • 1970-01-01
    • 2012-04-03
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    相关资源
    最近更新 更多