JavaScript/PHP注册电子邮件确认工作流的安全注意事项

JavaScript/PHP注册电子邮件确认工作流的安全注意事项,javascript,php,security,registration,Javascript,Php,Security,Registration,我正在为我的JavaScript/PHP网站构建一个用户注册工作流。用户注册后,将其添加到数据库中(处于非活动状态)。然后,用户将收到一封电子邮件确认,要求他们单击确认链接 当前,确认链接将用户重定向到站点登录页面,确认代码作为URL参数。准备好文档后,JavaScript将从URL中提取确认代码并将其提交到PHP后端。如果代码有效,则数据库中的用户状态将升级为活动 从安全角度来看,确认链接直接导航到PHP,然后PHP可以将用户重定向回网站,这样更好吗?最佳做法是什么?我认为,只要您仍在验证安全

我正在为我的JavaScript/PHP网站构建一个用户注册工作流。用户注册后,将其添加到数据库中(处于非活动状态)。然后,用户将收到一封电子邮件确认,要求他们单击确认链接

当前,确认链接将用户重定向到站点登录页面,确认代码作为URL参数。准备好文档后,JavaScript将从URL中提取确认代码并将其提交到PHP后端。如果代码有效,则数据库中的用户状态将升级为活动


从安全角度来看,确认链接直接导航到PHP,然后PHP可以将用户重定向回网站,这样更好吗?最佳做法是什么?

我认为,只要您仍在验证安全代码,那么您如何操作就无关紧要了。如果你真的想,你可以用PHP来实现

将用户发送到例如
/verify.php?key=123456
,并在您的页面上:

if (isset($_GET['key']))
{
    $key = $_GET['key'];
    // TODO: Perform validation on $key
    // TODO: Do whatever you are already doing to list the user's email as valid.
}

从安全角度来看,这并不重要。无论是通过URL/PHP立即完成,还是在文档加载时通过AJAX完成,任何人都可以看到执行确认的机制(通过源代码)


如果您担心安全性,我想您可能需要一对匹配的邮件(电子邮件+确认码),并通过URL传递这两个邮件进行验证。

在撰写本文时,发送指向用户电子邮件的链接是不安全的(可能导致模拟),特别是如果你的用户可能使用Gmail收发电子邮件或使用Chrome浏览器(Chrome、Chrome、MicrosoftEdge、Brave浏览器、DuckDuckGo浏览器都使用Chrome引擎)


您更愿意向用户电子邮件发送代码,如果您必须发送链接,请确保您有一个专用页面来处理需要用户操作(如单击)或需要JavaScript运行并将代码发送到服务器的确认页面。

您应该确保验证页面实际呈现(而不仅仅是 发生GET请求)。浏览器,如chrome(浏览器)和防病毒软件 程序)通常在用户没有明确单击URL的情况下加载URL 出于安全原因,预取或扫描

这可能导致恶意参与者(Eve)想要 使用其他人的电子邮件建立帐户(Alice)。伊芙报名了,然后 爱丽丝收到一封电子邮件。爱丽丝打开电子邮件,因为她很好奇 关于一个她没有要求的账户。她的浏览器(或防病毒软件) 在后台请求URL,无意中激活 帐户

我会在页面上使用JavaScript来验证页面是否正确 并在电子邮件中包含一个链接,用户可以在其中报告 他们没有创建此帐户

Gmail在没有用户干预的情况下打开并缓存电子邮件中的URL。如何以及为什么?

当运行一个系统来检查用户 点击模拟钓鱼测试。我们看到的问题是 有时候,gmail会通过电子邮件发送一个url(而不仅仅是一个电子邮件地址) 图像链接)以缓存它,即使用户没有单击 链接具体来说,用户将打开电子邮件,我们将看到一个或两个 谷歌IPs(其中一个是在YouTube上注册的?)也是开放的 跟随url链接。这应该发生吗?为什么 机制

在我找到上述信息之前,这个问题困扰了我一年多