【发布时间】:2021-05-18 11:07:46
【问题描述】:
我正在注册,其中用户输入电子邮件作为他们的用户名,我必须在成功注册后向他们的电子邮件发送一个随机代码。
到目前为止,我得到的是:
-
第 1 步:用户使用他们的电子邮件注册。
-
第 2 步: API 生成一个随机代码并将其插入我的数据库表
(tbl_temp_otp)。
-
第 3 步: 插入数据库后,代码将发送到注册时提供的电子邮件中。
-
第 4 步: 用户获取代码,并将其输入到注册表单中,然后 API 检查该代码是否存在并且仍在
unused状态。
到目前为止,它有效。
我的问题是,如何通过 POST 请求发送 OTP 代码,而没有人在谷歌浏览器的 network 选项卡中看到它?
根据 cmets 进行编辑
我认为我以错误的方式解释了这个问题......
我真正的意思不是without anybody seeing it,而是without the registrant seeing it。
由于注册人能够看到插入数据库中的代码,我担心他们会使用不存在的电子邮件地址进行注册,并通过查看network 选项卡并输入插入的 OTP 来验证它代码并且仍然能够使用提供的不存在的电子邮件地址完全注册。
【问题讨论】:
-
“我怎样才能通过 POST 请求发送 OTP 代码,而没有人在谷歌浏览器的网络选项卡中看到它?” – 你不能。为什么你认为这是必要的?
-
without anybody seeing it...假设您使用HTTPS,唯一可以看到它的人是用户,这是他们的令牌,所以没关系。到目前为止,我同意所有其他 cmets 和答案,这完全不是问题。此外,如果它真的是一个一次性-密码,那么当它在 POST 中发送时,假设您的服务器成功接收并处理它,那么它将被视为已使用且无法使用再次。因此,即使当时有人确实拦截了它,也没关系。包含它的电子邮件可能会误入歧途,但同样存在很小的风险。 -
重新编辑:作为一个问题,这比以前更没有意义。你说“没有注册人看到它”。但这是不可能的,部分原因是他们始终可以访问“网络”选项卡,但主要是因为他们首先将其输入到表单中!你自己说
User gets the code, and input it into the registration form。所以他们已经知道密码了!如果你对他们隐藏它,整个过程就无法实施。我认为您没有考虑过您所说的逻辑。 -
此外...在您的数据库中,该 OTP 代码应与特定的注册尝试相关联,因此应与特定的电子邮件地址(代码发送到的那个)相关联。因此,任何人不可能将其注册到不同的电子邮件地址。提交它应该只激活它最初关联的电子邮件地址。如果可以使用它来激活不同的电子邮件地址,那么您的服务器端逻辑存在严重缺陷。这与表单的 POST 数据的内容无关。
-
还有,我之前说过,如果用户在表单中提交代码,服务器接受了,那么既然你说的是一次性密码,应该是不能用再次使用该代码,以激活相同的电子邮件或不同的电子邮件。同样,如果可以做到这一点,那么您的服务器端逻辑中还有另一个严重的缺陷。同样,这与表单的 POST 数据的内容无关。
标签: php laravel registration mailgun one-time-password