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

为什么数据库的主键不应该显示在html代码中,例如在select字段中?

  •  1
  • Bevor  · 技术社区  · 14 年前

    <select>
           <option value="1">Value 1</option>
           <option value="2">Value 2</option>
    </select>
    

    在数据库中有以这些值为主键(1、2、3…)的查找表。所以,我存储在引用这个查找表的表中的select框中的数据是一个类似于1、2、3的数字。。。。(作为选项字段的值)。 出于安全原因,我读到最好不要在html和as key中使用相同的值,但这有什么关系?我不明白为什么这应该是安全原因?

    4 回复  |  直到 14 年前
        1
  •  4
  •   brabster    14 年前

    听起来像 security-through-obscurity ,也就是说我根本没有安全感。

    数据库中一个好的主键纯粹是为了系统的唯一性,不应该与数据的含义相关。如果主键 与数据相关(比如说人们的社会保险号码之类的),那么在公开密钥时就会遇到安全问题,因为他们公开的信息 被恶意使用。在这种情况下,虽然您可以认为从技术角度来看,最好的方法可能是更改应用程序以停止使用那些有意义的密钥,但将密钥映射到其他无意义的密钥以克服此问题可能是一种更令人满意的方法。

    除了安全性之外,如果密钥确实标识了要与之交互的数据,并且您的应用程序在生成页面时正在查找密钥,我就无法考虑具体的问题。

        2
  •  1
  •   Wayne Smith    14 年前

    我会关心如何从URL处理信息。如果我使用value=“does_this_break_the_code”或value=“can_I_read_secret_info”发布内容会发生什么

        3
  •  1
  •   nvogel    14 年前

    明智的做法是谨慎使用 输入URL、HTML或应用程序代码。我一般不会对钥匙说同样的话。

    我建议您在url和持久代码中使用自然键。将代理项密钥保留在数据库内部,这是它们应该位于的位置。

        4
  •  0
  •   JKirchartz    14 年前

    假设你有一个汽车数据库,所有的汽车都有一个唯一的识别码,称为车辆识别码(VIN,Vehicle Identification Number),在车辆识别码(VIN)中,对每一辆特定的汽车的一堆信息进行编码,直到生产它的工厂。车辆识别号只识别一辆特定的汽车。物品上的PK可以是任何东西,汽车从数据库中掉下来,现在PK不存在,但那个车辆识别码还在某处。这是一个比PK更好的唯一ID,所以这可能是应该显示给用户的。