最佳 URL ID 实现

问题描述 投票:0回答:5

我正在尝试想出一个好方法来避免直接使用 URL 中的 ID 来查找表条目。 主要原因是出于隐私原因,我不希望我的用户能够简单地将 /?unique_id=10 更改为 /?unique_id=11 并查看其他人的信息。

我注意到许多网站都使用随机生成的字符串,但是像这样的东西的最佳结构实现是什么?

谢谢!

哦,我怀疑这是否重要,但我正在使用 PHP。

编辑: 页面上包含的信息是公共信息。也就是说,知道该链接的任何人都应该能够毫无问题地访问该页面。我想要防止的是人们简单地迭代 ID 并查看数据库中的所有内容。我更喜欢只有获得链接的人才能访问该页面。也就是说,如果一个随机的人偶然发现它,这并不是一个大问题。

另外,我不希望人们通过查看 ID 来计算出总共有多少条目。

php
5个回答
3
投票

您可能需要某种用户检查以确保人们无论如何都看不到其他人的记录,但为此使用 GUID 是一个好的开始。

您可以使用诸如 record1、record2 等的哈希值,但坚定的黑客可以轻松做到这一点。

另一种选择是使用记录别名,这样每个记录都有一个表示它的字符串,然后将其用作键。 您经常在 WordPress 或其他 CMS 系统中看到这种情况。

因此,如果您的 id 引用的是帖子,可以使用标题并将空格替换为 -

例如。 www.example.com/article.php?id=夏天是一年中最好的时间


2
投票

您不必在 url 级别处理这个问题。您只需在会话中处理这一点,因此如果用户 123 尝试访问 yoursite.com/unique_id=456,会话检查将阻止他这样做。我的意思是您正在谈论私人页面,不是吗?

即使你对它(用户 ID)进行编码,它也可以作为哈希或其他东西来访问,这只不过是混淆,这不如阻止你自己(通过会话)访问


1
投票

我为此使用了 MySQL 的

UUID()
函数,但你绝对应该使用权限检查来确保用户无法查看其他用户的数据。

这个答案简单地展示了如何创建一个唯一的标识符。


0
投票

您可以使用md5(id)对其进行加密并搜索具有相同md5(id)的记录 即

select * from table where md5(id) = '$encrypted'

0
投票

为什么不使用 AJAX 调用对数据库进行任何查询,而不是将它们包含在 URL $_GET 中。

© www.soinside.com 2019 - 2024. All rights reserved.