代码之家  ›  专栏  ›  技术社区  ›  keyboardP

从数据库获取对象的详细信息-保持ID安全

  •  0
  • keyboardP  · 技术社区  · 16 年前

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

    4 回复  |  直到 16 年前
        1
  •  4
  •   Remus Rusanu    16 年前

    您真的想对用户隐藏数据库ID吗,比如在一个场景中,用户对数据库有一些备用访问权限,而您想让他以硬方式搜索图书?

    通常要求不是对ID保密,而是防止用户找出其他项目的ID(例如强制某个导航漏斗到达某个项目)或与其他用户共享ID。例如,有一个URL就可以了 http://example.com/books/0867316672289 其中0867316672289将 相同的 向同一个访问者预订,但用户无法浏览该值,因此0867316672288或0867316672290将登录404。也可能需要 另一个 输入0867316672289的用户也会得到404。

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

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

        2
  •  1
  •   Community Mohan Dere    8 年前
        3
  •  0
  •   Moose    16 年前

    每本书用一个“伪ID”怎么样?我假设您需要客户机端的东西来告诉服务器客户机选择了哪本书。

    为每本书生成一个guid以用作Web端的“伪ID”,这样可以保证真正的ID相当安全。

        4
  •  -2
  •   CesarGon    16 年前

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

    这有道理吗?-)