在HTML ID中使用数据库主键

时间:2012-07-12 11:41:35

标签: html

只是想问。

我有一个网站,其中每个用户都链接到数据库中的ID,并且此主键包含在许多表中。我提取用户信息的最快方式是拥有此ID。

将此ID放在网站HTML代码中会被视为不良做法吗?例如id =“theIDnumber”

否则我可以使用用户名,然后在数据库中为此ID引用它 - 这很好,但我相信使用ID会更快。

想法?

1 个答案:

答案 0 :(得分:5)

我拒绝,如果您的密钥可预测。一个简单的例子:如果您使用顺序递增主键,用户可以从可能隐私问题的数据中提取信息。例如他们可以推断在帐户之前创建了哪个帐户。对于那些试图系统地从您的网站获取信息的人来说,生活也变得轻松。

一些相关的阅读

  1. https://stackoverflow.com/a/7452072/781695

      

    您可以让最终用户有机会搞乱这些变量   并传递他们喜欢的任何数据。减轻这种情况的对策   漏洞是创建间接对象引用。这个   听起来可能是一个很大的变化,但并不一定如此。   你不必去换你所有的桌子或任何东西,你可以做   它只是通过使用间接的方式聪明地处理您的数据   参考地图。

  2. https://security.stackexchange.com/a/33524/37949

      

    隐藏数据库密钥并不是完全必需的,但它确实可以生效   如果攻击者试图引用内部ID,则会更加困难   一次袭击直接引用文件名和其他此类内部   标识符可以允许攻击者映射内部结构   服务器,可能在其他攻击中有用。这也邀请了道路   注入和目录遍历问题。

  3. https://www.owasp.org/index.php/Insecure_Direct_Object_Reference_Prevention_Cheat_Sheet

      

    首先使用授权列表填充对象引用映射   临时存储在会话中的值。当用户   请求一个字段(例如:color = 654321),应用程序进行查找   这个映射来自会话,以确定适当的列名。如果   在这个有限的地图中不存在该值,而用户则不存在   授权。参考地图不应该是全球的(即包括每一个   可能的价值),它们只是临时地图/字典   曾经拥有授权价值。