URL参数值加密/解密

时间:2011-10-13 08:04:49

标签: php encryption

我想加密url参数值,如

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

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

防止机器人破解自动递增到数据库的用户ID,我不确定base64_encodebase64_decode的安全性。有没有办法做到这一点??

3 个答案:

答案 0 :(得分:5)

  

有没有办法做到这一点?

哈希用户ID无用,因为它很容易还原。加密它们既不实际也不必要 - 只需在创建记录时分配随机用户ID,并且永远不要公开自动增量ID。

答案 1 :(得分:-1)

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

它使用字符列表生成一个字符串,因此它们必须存储为case_sensitive。

$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);

答案 2 :(得分:-1)

您可以创建id的哈希值,以便得到类似的内容:

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

在你的db查询中,你可以在users表上做一个select,包括一个WHERE语句,它也会像下面那样哈希:

WHERE MD5(id) = youridfromqueryparameters

对此的一个注意事项是MD5哈希值不一定必须是唯一的。所以你不能确定这个select语句总是返回你想要的行。

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