只是想问。
我有一个网站,其中每个用户都链接到数据库中的ID,并且此主键包含在许多表中。我提取用户信息的最快方式是拥有此ID。
将此ID放在网站HTML代码中会被视为不良做法吗?例如id =“theIDnumber”
否则我可以使用用户名,然后在数据库中为此ID引用它 - 这很好,但我相信使用ID会更快。
想法?
答案 0 :(得分:5)
我拒绝,如果您的密钥可预测。一个简单的例子:如果您使用顺序递增主键,用户可以从可能隐私问题的数据中提取信息。例如他们可以推断在帐户之前创建了哪个帐户。对于那些试图系统地从您的网站获取信息的人来说,生活也变得轻松。
一些相关的阅读
https://stackoverflow.com/a/7452072/781695
您可以让最终用户有机会搞乱这些变量 并传递他们喜欢的任何数据。减轻这种情况的对策 漏洞是创建间接对象引用。这个 听起来可能是一个很大的变化,但并不一定如此。 你不必去换你所有的桌子或任何东西,你可以做 它只是通过使用间接的方式聪明地处理您的数据 参考地图。
https://security.stackexchange.com/a/33524/37949
隐藏数据库密钥并不是完全必需的,但它确实可以生效 如果攻击者试图引用内部ID,则会更加困难 一次袭击直接引用文件名和其他此类内部 标识符可以允许攻击者映射内部结构 服务器,可能在其他攻击中有用。这也邀请了道路 注入和目录遍历问题。
https://www.owasp.org/index.php/Insecure_Direct_Object_Reference_Prevention_Cheat_Sheet
首先使用授权列表填充对象引用映射 临时存储在会话中的值。当用户 请求一个字段(例如:color = 654321),应用程序进行查找 这个映射来自会话,以确定适当的列名。如果 在这个有限的地图中不存在该值,而用户则不存在 授权。参考地图不应该是全球的(即包括每一个 可能的价值),它们只是临时地图/字典 曾经拥有授权价值。