【问题标题】:How to encrypt get data in URL如何加密获取 URL 中的数据
【发布时间】:2014-01-07 19:38:34
【问题描述】:

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

PS:我的应用程序是 PHP 的

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

【问题讨论】:

  • 创建1次密码重置令牌,输入电子邮件并登录数据库

标签: php security get


【解决方案1】:

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

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

【讨论】:

  • 我怎么没想到 ;-)
  • 感谢您的解决方案 :) 通过哈希,您的意思是发送已编码的 user_id + 密钥?
  • 任何人都可以计算sha1($user_id)
  • 令牌应该是随机的。
  • 要么令牌需要随机存储,要么需要用 MAC 签名(通常是通过服务器密钥的 HMAC)。无论哪种方式,它都应该在使用后或经过一定时间后停止工作。
【解决方案2】:

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

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
}

【讨论】:

  • rand() 不适合用于令牌生成等安全敏感功能的 PRNG 功能。参见例如stackoverflow.com/questions/1182584/…
  • 该功能不会尝试保护密码,只是创建一个。您仍然需要将可能使用的任何哈希算法或技术应用于字符串。不过我会编辑帖子。
  • @bobince:我同意。 Subie 根本不使用rand() - 你在链中添加了一个薄弱环节。
  • 添加哈希函数并不会使其更安全,这不会增加熵。您必须在散列之前包含密钥材料,以使密码不可猜测。
  • @bobince md5() 是一个示例,我假设使用该脚本的任何人都会将他们使用的任何安全功能应用于密码。感谢您指出 rand() 问题。
猜你喜欢
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
  • 2011-02-18
  • 2014-08-16
  • 1970-01-01
  • 2010-10-14
相关资源
最近更新 更多