繁体   English   中英

如何加密获取URL中的数据

[英]How to encrypt get data in URL

想象一下我正在实现重置密码链接:天真的解决方案是在URL中传递人员的ID(不加密),并询问新密码并更新数据库。 这是不安全的,因为user_id对用户可见,并且他们可以更改URL。 在这方面对安全的补救措施是什么? 据我所知,urlencode并没有太大帮助,因为它仅将非字母字符转换为%和其他一些字符。

PS:我的应用程序在PHP中

如果需要更多说明,请告诉我。

您应该使用令牌。 当用户请求重设密码时,您会向他发送一封电子邮件,其中包含一个唯一的(我希望)令牌,该令牌以后会转换为该用户帐户,应修改密码。

令牌可能是两件事的哈希。 例如hash(id + email + time()) 由于哈希是不可逆的,也不是密码术,因此您可以在数据库中创建一个简单的表来存储这些令牌。

我刚刚为我的应用程序开发了类似的东西。 我的想法是生成一个临时密码,并在该临时密码的前面附加一种密钥。 当他们使用新密码登录后,我将检查前几个字符是否与我的密钥匹配,如果匹配,则将其重定向到密码更改页面。

的PHP

public function tempPass() {

$key = '$a4104_';

$alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
$pass = array(); 
$alphaLength = strlen($alphabet) - 1; //Creates a temp password
for ($i = 0; $i < 25; $i++) {
    $n = rand(0, $alphaLength);
    $pass[] = $alphabet[$n];
}
$pass = implode($pass); //turn the array into a string

//Apply whatever hash function you'd like here
$pass = md5($pass); //Note md5 is just an example

$pass = $key.$pass;

return $pass;

    //Possibly add a mail function here to send the user a new password

}

我把它放在我的登录脚本中。

$tempCheck = substr($password, 0, 7);

if($tempCheck === '$a4104_') {
$temp = true;
    //They have a temporary password so redirect them
}else{
$temp = false;
    //Not using a temporary password
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM