首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP / Mail / MySQL:注册电子邮件确认

PHP / Mail / MySQL:注册电子邮件确认
EN

Stack Overflow用户
提问于 2016-07-22 07:10:10
回答 3查看 1.6K关注 0票数 4

我不熟悉PHP / MySQL和电子邮件。我很确定这个问题已经问过什么地方了,但我找不到。因此,如果这是麻烦,我道歉,并感谢您提前!

在用户被添加到数据库之前,是否可以先单击电子邮件中的链接?

你也知道,对于某些网站来说,每个电子邮件验证都有一个独特的网址(图片上用红色显示)?他们如何创建一个网页,在每封电子邮件中都是独一无二的?

图片贷记:https://kayako.atlassian.net/wiki/download/attachments/5734920/subs-validation.png?version=1&modificationDate=1291956283000&api=v2

非常感谢大家的关注!如果可能的话,我不喜欢有直接的脚本,我可以复制和粘贴,因为我想找出自己:P,但请给我一些提示,因为我完全迷路了。

如果有什么不清楚的地方,请告诉我,我会尽力澄清的!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-22 07:28:54

注册过程

  1. 用户在线填写表单,包括电子邮件和密码在内的基本细节,并将表单提交给register.php
  2. register.php将用户信息添加到临时位置,例如pending_users表,该表包含用户提交的所有字段以及expirationactivation_code字段。这段代码可以是任意随机的,不可能猜测值。例:hash('sha1', mt_rand(10000,99999).md_rand(10000,99999))。只是不要做任何可预测的事情,如散列当前时间,或用户名
  3. register.php通过链接到activate.php并包含激活代码的URL向用户发送电子邮件。例句:example.com/activate.php?code=a2ef24...电子邮件也应该通知用户过期时间(1到12小时的有效期在我看来是可以的)。
  4. 当用户单击链接时,她会触发对GETactivate.php请求。在此过程中,用户将证明电子邮件地址的所有权。
  5. activate.php从请求参数获取代码,例如:$code=$_GET['code']。使用该代码,脚本将查询pending_users表以获得与该代码匹配的记录。
  6. 如果找到该代码,请在继续之前检查它是否已过期。过期将阻止其他人在很长时间后进入用户帐户完成注册。
  7. 如果代码有效,则从匹配记录中捕获用户详细信息,并从pending_users表中删除该记录。
  8. 在常规的users表中写入匹配的记录。在此之前,用户无法登录,因为登录脚本只检查users表,并忽略pending_users表。
  9. 登记完毕。

安全注意事项I:

为了保护用户,千万不要用明文存储密码。当您从登记表(例如:$_POST['pwd'] )收到它时,请做:

代码语言:javascript
运行
复制
$pwd = $_POST['pwd'];

//first validate; it should meet minimum requirements

$pwd_hash = password_hash($pwd, PASSWORD_DEFAULT); // <- the hash gets stored

稍后,要验证密码,请执行以下操作:

代码语言:javascript
运行
复制
password_verify($cleartext_pwd, $pwd_hash);

如果密码正确,它将返回true;否则返回false

安全备注II:

为了保护您,永远不要在DB查询中直接插入用户提供的值。这意味着任何从外部到达的价值。不仅仅是用户名,电子邮件,密码。但也有您从用户那里得到的值,如上面的activation_code值或cookie值或标头(例如用户代理)。相反,学习使用预先准备好的语句。这将保护您免受SQL注入的影响。

票数 5
EN

Stack Overflow用户

发布于 2016-07-22 07:15:18

不确定在验证之后是否可以在数据库中添加数据.

当我想做类似的事情时,我会在users表(或metas表)中创建一个数据,比如“验证”。如果该数据为“真”,则用户已经进行了验证,并且可以使用他的帐户。如果它仍然设置为"false",用户没有验证他的帐户:他不能使用它。

这样,您必须确保用户尝试登录时帐户是有效的,但这不是什么大不了的^^。

希望它有用。

票数 1
EN

Stack Overflow用户

发布于 2016-07-22 07:15:36

这些不是一个独特的网站,只有一个脚本验证注册定稿。传入请求(当用户单击链接时)通过服务器端“请求重写”将所有请求路由到同一个脚本,因此随机令牌值可用作脚本执行的参数(参数)。

脚本所做的工作:它检查数据库中是否存在该随机令牌值,在用户实际注册之前,该值已经生成并存储在数据库中。

对于该脚本,唯一要做的事情是删除确认随机令牌和/或设置一个标志,指示注册的用途实际上已经通过单击链接确认了他的标识(电子邮件地址)。

简单而直截了当。很难绕过,因为您无法猜测在没有收到电子邮件的情况下为注册用户生成的随机令牌值。但是,考虑到攻击脚本使用匿名电子邮件服务(一次电子邮件地址)接收和评估这样的确认请求是很简单的,如果攻击者知道该过程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38520281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档