用户注册(和以后的身份验证)-我的方法还是使用OpenID?

问题描述 投票:5回答:1

下午好,

我正在研究允许新闻用户在网站上注册的脚本。

概括地说,这些是我计划的步骤:

  1. register.php-新用户填写表格,输入用户名,地址详细信息,公司名称和电子邮件地址。然后,数据通过SSL重新发布回脚本。

  2. register.php-脚本检查用户名或电子邮件地址是否尚未存储在数据库中。如果不是,它将使用这些数据生成令牌,该令牌以超链接的形式通过电子邮件发送到电子邮件地址,并将该令牌和其余数据作为超链接的参数。所使用的令牌是由一个秘密字符串构成的-这样,只有此脚本才能编写可使用其余数据重建的代码。

  3. email-单击超链接(SSL),从而通过$ _GET将数据通过SSL传递到下一个脚本。

  4. verify.php-使用传递的$ _GET数据和已知的秘密字符串重建令牌。如果哈希值相同,则说明令牌是由我们的一个脚本生成的。在单击“提交”(通过SSL将数据发布到自身)之前,提示用户输入密码(两次)。

  5. verify.php-该脚本在将新的用户数据以及哈希密码和密码插入数据库之前,检查用户名或电子邮件地址是否不存在。

  6. email-向管理员发送电子邮件通知,通知他们新用户已注册-新用户需要先获得批准,然后才能登录。该电子邮件包含指向下一个用户的链接。脚本,并通过$ _GET将新用户的ID传递给该脚本。使用SSL。

  7. confirm.php-脚本使用新用户传递的ID在可编辑字段(而不是密码或密码)中显示已注册的所有详细信息。单击“确认”后,表单数据将通过SSL发布回相同的脚本。

  8. confirm.php-脚本更新该用户的记录,并将新用户记录设置为“已确认”。新用户收到电子邮件通知,现在可以登录。

这似乎很长,但是需要完成一系列步骤。

所有新用户都必须先验证其电子邮件地址,然后才能将任何数据存储在我们的数据库中。密码传递的次数远远超过了密码传递的次数。它仅通过POST以原始格式传递回“ verify.php”脚本,然后对其进行哈希处理。我将确保SSL数据包的POST数据未记录在服务器上。这样,服务器上就没有原始密码的记录了,对吧?

为每个用户生成并存储了随机盐-以防止出现彩虹表。

我错过了什么吗?我唯一关心的是通过SSL传输原始密码。尽管SSL可以防止嗅探,但是我对于将原始密码接收到服务器仍然感到不安。就是说,我不想通过在客户端进行哈希处理使该项目容易受到“中间人”攻击。

有人可以建议我的方法有任何缺陷吗?我尝试了Google搜索,尽管有一些适用的帖子,但似乎在整个过程中没有任何关系。我希望此主题将使将来的访问者以及本人受益。

谢谢。

php authentication passwords hash registration
1个回答
2
投票

两个月前我不得不做同样的事情,我按照你的方式做了。除了这一点:

在要求用户输入所有内容之前,第一步应该是验证并确认电子邮件。完成后,我们会询问其他所有内容。

达到2个目标:

  1. 用户有时会害怕输入太多信息。如果他们已经发送了电子邮件,通常他们会更愿意继续该过程。

  2. 已经注册并且页面错误的用户:您可以假设他们丢失了电子邮件并提出解决方案(如果电子邮件已经在数据库中)]]

  3. ...但是我个人认为最好的方法是坚持使用openId ;-)下次我将尝试使用它。

© www.soinside.com 2019 - 2024. All rights reserved.