最佳URL ID实现


Best URL ID implementation

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

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

谢谢!

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

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

此外,我不希望人们看ID就知道总共有多少条目。

您可能需要进行某种用户检查,以确保人们不会看到其他人的记录,但使用GUID是一个良好的开端。

你可以使用record1、record2等的散列,但一个坚定的黑客可以很容易地做到这一点。

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

因此,如果你的id指的是一篇帖子,可以取标题并将空格替换为-

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

您不应该在url级别处理这个问题。你只需要在会话中处理好这一点,所以如果用户123试图访问你的site.com/unique_id=456,会话检查会阻止他这样做。我的意思是,你说的是私人页面,不是吗?

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

我已经为此使用了MySQL的UUID()函数,但您绝对应该使用权限检查来确保用户无法查看其他用户的数据。

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

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

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

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