URL参数值加密/解密


URL parameters value encryption/decryption

我想加密url参数值,如

http://www.sitename.com/index.php?userid=12546

http://www.sitename.com/index.php?userid=SADFFHGFE

,以防止机器人破解用户id,这是自动增加到数据库,我不确定base64_encodebase64_decode的安全性。有什么办法可以做到吗?

有办法做到这一点吗??

哈希用户id是无用的,因为它很容易恢复。加密它们既不实际也没有必要——在创建记录时只分配一个随机的用户ID,并且从不公开自动增量ID。

您可以创建id的散列,因此您可以得到如下内容:

http://www.sitename.com/index.php?userid=81dc9bdb52d04dc20036dbd8313ed055

在你的db查询中,你可以对用户表做一个选择,包括一个WHERE语句,也哈希id列,如:

WHERE MD5(id) = youridfromqueryparameters

一个边注是MD5哈希不一定是唯一的。因此,您不能确保这个select语句总是返回您想要的行。

当然,它与仅仅使用id并没有太大的区别。一个更好的解决方案可能是为每个用户生成一个唯一的(不是自动递增的)id,并在url中使用它(无论是否加密)。

您可以存储一个随机生成的字符串,并将其存储在与用户记录相同的行中,我使用它为我的站点上的测验生成一个随机ID:

它使用字符列表生成一个字符串,因此它们必须以区分大小写的方式存储。

$p_length是要输出的字符数,我使用'6'

function generate_id($p_length)
{
    $char_list = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $char_list .= "abcdefghijklmnopqrstuvwxyz";
    $char_list .= "1234567890";
    $char_list_len = strlen($char_list);
    $random = "";
    for($i = 0; $i < $p_length; $i++)
    {
        $char = rand() % $char_list_len;
        $random .= $char_list[$char];
    }
    return $random;
}
$random_id = generate_id(6);