2012-07-12 75 views
2

只想问一下。在HTML中使用数据库主键ID

我有一个网站,每个用户链接到数据库中的一个ID,这个主键包含在许多表中。我提取用户信息的最快方法是获得此ID。

将这个ID放入网站HTML代码会被认为是不好的做法吗?例如id =“theIDnumber”

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

想法?

+0

你可以(更确切地说,你应该)用它的ID,因为它们是主键 – hjpotter92 2012-07-12 11:44:22

+0

你的直觉是对的访问。通常做什么是表单中的隐藏参数,例如,将用户标识作为参数,并且只显示相关信息,例如first,lastname。这样,如果你有两个人叫做John Doe,那么当你与服务器通信时,你会准确地知道你在谈论哪一个人。 – 2012-07-12 11:47:43

+0

是否可以在HTML代码中添加此密钥 - 意味着其他人可以在源代码中读取它?或者这并不重要......在这里考虑更多关于安全的问题。 – Adam 2012-07-12 11:47:43

回答

3

我会说不,如果你的钥匙是可预测。一个简单的例子:如果您使用顺序增加主键,用户可以从数据中提取信息,这可能是隐私问题。例如他们可以推断哪个帐户在他们的帐户之前创建。对于那些试图系统地从您的网站挖掘信息的人来说,生活也变得很容易。

一些相关的阅读

  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)时,应用程序会在该会话的 中查找以确定适当的列名称。如果 该值不存在于此有限映射中,则该用户不是 授权的。参考地图不应该是全球性的(即包括每个 的可能值),它们是只有 有史以来填充授权值的临时地图/字典。