验证用户的最低信息

时间:2014-08-06 12:34:15

标签: php sql security http authentication

我有一张PK是INT类型的表(大约40亿个可能的无符号值,但是,我最多会有200万个)。该表还有一个CHAR(32)列,其中包含一个随机值(使用bin2hex(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM))创建),以及指示用户ID的FK列。

我将发送一些电子邮件,其中包含链接,链接将包含上表的PK和/或随机值,以及可能的userID。链接还将包含答案(是,否等)。例如,链接可能如下所示:

<a href="ckr.php?rsp=eae8a14011e82cbf385f69b431a17e49&amp;ans=yes">Yes</a>

我有一个PHP页面,它接受GET请求(当然是从上面提到的电子邮件发起的),如果经过身份验证,则使用提供的答案更新数据库中的相应记录。

仅仅确认数据库中存在的16字节随机值足以验证它来自收到电子邮件的用户吗?如果没有,为什么不,你会推荐什么?

2 个答案:

答案 0 :(得分:0)

我也会使用用户ID,因为它更快。

您的网址将变为:ckr.php?userid=1&rsp=eae8a14011e82cbf385f69b431a17e49&ans=yes

然后,当您签入数据库时​​,只检查userid。如果用户存在,则检查rsp代码。如果还可以,那就做好自己的工作吧。

答案 1 :(得分:0)

请注意,通过电子邮件发送的所有内容都是未加密的,因此不适合对用户进行身份验证

你可以采取一些措施使其更加安全:

  • 使密钥仅在短时间内可用。也许24小时的窗口?
  • 收到get请求时询问用户密码。
  • 收到回复时无效。