无密码登录系统

时间:2010-08-02 18:50:58

标签: php

创建无密码登录系统的最佳方法是什么?

我正在考虑使用某种随机生成的16个字符标记,例如:

mysite的/构件/的index.php?标记= 2j0n1qyjgcxyu3oy

我正在开发一个报价系统,其想法是供应商不必注册,而是我为他们创建帐户,所有他们要做的就是点击他们电子邮件中的链接以提交报价。这将鼓励供应商提交报价,因为他们知道他们不需要注册或登录。

如果他们碰巧猜到令牌,那么有人可以做的伤害并不大,但我仍然希望尽可能安全地保证系统的安全,而不需要密码。

5 个答案:

答案 0 :(得分:5)

令牌没问题,我会使用MD5或SHA1哈希。

但是你知道,你似乎是这样,这可以被数据包嗅探器嗅到,特别是通过电子邮件,所以只知道。但如果这不是问题,我认为给供应商使用令牌没有问题。如果它被嗅探或滥用,只需为它们重新生成一个新令牌。

希望有所帮助。

答案 1 :(得分:2)

这是一种非常常见的方法。诀窍是确保令牌是唯一的。我过去使用过GUID值。

这一切归结为风险与奖励的对比。

其他人可以使用该令牌访问您的系统的风险是什么。由于它是通过明文电子邮件发送的,因此风险可能适中。 (攻击者必须在他们的网络上或您和他们的电子邮件主机之间进行监听。仍然不容易。)

奖励是什么?攻击者可以用公司名称提交报价。这有多糟糕?这取决于你。

我能看到的另一个风险是,如果一家公司提交报价,然后决定他们不想兑现它。他们可以说他们没有提交。其他人必须以他们的名义这样做。同样,这种可能性可能不是很高,可以通过其他方式处理。

答案 2 :(得分:1)

你的令牌不会像密码一样吗?您还可以将它们重定向到一个特殊的站点,在那里他们必须单击邮件中的一个按钮,以验证它们的标识(或让它们从邮件中输入一个引脚),这样您就可以确保不会发送所有关键数据GET但是每个POST(在公共场所很重要)

希望我能帮忙

答案 3 :(得分:0)

如果他们收到某种日常电子邮件,您可以为每个链接生成一个单独的唯一ID。或者在特定时期后过期,并每隔x天通过电子邮件向他们发送一次更新。

如果有人猜到一个身份证或者找别人的话会有多大的交易?

另外,为什么只有16个字符?他们不必打字,所以为什么不把它打长?

伪代码

  $urlToken = md5( reverse(md5($key)) . md5( right(md5(key), 16) . left(md5(key),16) );

会创建一个64个字符的标记。

答案 4 :(得分:0)

你可以试试一个uuid:

<?php

$uuid = `uuidgen`;

echo $uuid;

?>