【问题标题】:ASP.NET Core: how to hide database ids?ASP.NET Core:如何隐藏数据库 ID?
【发布时间】:2020-02-24 18:31:44
【问题描述】:

也许这已经被问了很多,但我找不到关于它的全面帖子。

问:当您不想将 id 从数据库传递到前端时,有哪些选项?您不希望用户能够看到您的数据库中有多少条记录。

到目前为止我发现/听到的:

  1. 在后端加密和解密 Id
  2. 使用 GUID 而不是数字自动递增 Id 作为 PK
  3. 将 GUID 与自动递增的 Id 一起用作 PK

问:您认识其他任何人吗?或者您对其中任何一个有经验吗?性能和技术问题是什么?如果您知道,请提供有关此主题的文档和博客文章。

【问题讨论】:

  • 使用 guid 是最好的,但如果你真的想要一个 int 并且不想发送它,我猜如果你不需要前面的 id,映射可以工作。
  • @LucaBNW 我认为仅使用 GUID 可能会导致长期性能问题。
  • 你需要前端的 id 吗?如果没有,则将 User 映射到没有 id 的 UserModel 之类的东西,然后将 UserModel 返回到前端。如果你需要它在前面,我不确定。不过,我总是选择 guid。
  • 除了虚假的安全感之外,这还能给你什么?
  • 对Id加解密后端比想多了

标签: sql-server database asp.net-core entity-framework-core azure-sql-database


【解决方案1】:

两件事:

  1. id 的存在并不能告诉您数据库中有多少记录。即使 id 类似于10,这并不意味着只有 10 条记录;它很可能是创建的第十个。

  2. 无论哪种方式,暴露 id 都与安全无关。 id 仅在它们所在的数据库表的上下文中有意义。因此,为了根据 id 识别任何内容,用户必须直接访问您的数据库。如果是这种情况,那么你遇到的问题远不止你是否暴露了一个 id。

    如果用户不应该能够访问某些 id,例如编辑页面,其中 id 作为 URL 的一部分传递,那么您可以通过行级访问策略来控制它,而不是通过混淆或尝试隐藏身份证。默默无闻的安全不是安全。

也就是说,如果您完全反对顺序 ID 的想法,那么请使用 GUID。使用 GUID 不会影响性能。它仍然是一个聚集索引,就像任何其他主键一样。显然,它们占用的空间比 int 之类的要多,但我们说的是每个 id 12 字节的差异——对于今天的存储来说几乎没有什么可担心的。

【讨论】:

    猜你喜欢
    • 2011-11-02
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    相关资源
    最近更新 更多