我正在构建一个网站上有公共内容的网站,但我不希望用户通过更改直接在的行的id
来猜测下一页的内容网址。
我发现here的方法是编码和解码十进制/基数36.但是这个方法的问题是id
仍然很容易猜到,因为1将保持为1 ,13将是D等。
使用较长的哈希/字母数字字符串作为id
的最佳做法和方法是什么?有点像Youtube网址,没有任何碰撞的可能性?
感谢您的帮助和建议,非常感谢。
答案 0 :(得分:1)
您可以加密/解密您的ID而不是编码。但是,听起来您必须按顺序执行特定的步骤(页面)序列。
我认为更好的方法是建立一个业务类来确定用户是否真的被允许(还)看到所请求的页面。这样,您可以使用Url上的ID,但依赖您的代码来确定acccess。
答案 1 :(得分:1)
也许最好的想法是使用简单的非线性算法修改哈希值之前的数字。也许是这样的:
<?php
$id = ($_GET['id']*3)+2;
$id = base_convert($id, 10, 36);
然后解开,只需反转算法:
<?php
$id = dase_convert($id, 36, 10);
$id = ($id-2)/3;
答案 2 :(得分:0)
实施GUID作为您的身份。
GUID(全球唯一标识符)是128位值,因此如果您想要捕获某人的ID,您可以进行猜测。
有各种工具可以生成GUID,VS2010有一个实用程序可以将GUID打成纯文本,但我不知道如何从代码生成,因为我从来没有需要,只有一次性使用。
GUID非常适合身份。 :)