我想加密url参数值,如
http://www.sitename.com/index.php?userid=12546
到
http://www.sitename.com/index.php?userid=SADFFHGFE
防止机器人破解自动递增到数据库的用户ID,我不确定base64_encode
和base64_decode
的安全性。有没有办法做到这一点??
答案 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中使用(加密或不加密)。