我正在进行注册,其中用户输入电子邮件作为他们的用户名,我必须发送一个随机代码到他们的电子邮件后,成功注册。
到目前为止,我得到的是:
***步骤1:**用户通过电子邮件注册。
**第二步: API生成一个随机代码,插入到我的数据库表(tbl_temp_otp)
中。
***第三步:**插入数据库后,代码将发送到注册时提供的电子邮件。
***第四步:**用户获取代码,在注册表单中输入,API检查该代码是否存在,是否仍处于unused
状态。
到目前为止,它工作。
我的问题是,我怎么能通过POST请求发送OTP代码,而没有人在谷歌Chrome的network
标签中看到它?
根据评论编辑
我想我用错误的方式解释了这个问题…
我真正的意思不是without anybody seeing it
而是without the registrant seeing it
。
由于注册人能够看到插入数据库中的代码,我担心他们会使用不存在的电子邮件地址进行注册,并通过查看network
选项卡并输入插入的OTP代码进行验证,并且仍然能够完全使用提供的不存在的电子邮件地址进行注册。
3条答案
按热度按时间tjvv9vkg1#
无法隐藏通过POST请求发送的OTP。最好的办法是使OTP基于时间,并限制其有效期。无论如何,在网络选项卡中可见的请求仅对相应的用户可见,因此没有实际的安全风险。希望这能澄清你的问题。您可以继续执行相同的过程。
lg40wkob2#
你不能
您通过电子邮件发送它,电子邮件客户端需要阅读它,然后它需要传输到用户的浏览器,以便浏览器可以通过网络将其发送回来。
用户的浏览器和电子邮件客户端属于用户。它们受用户控制。它们不能用于向用户隐藏信息。
但这不重要。这是一个一次性代码,旨在证明用户是他们声称的人。用户是否能拿到手并不重要。
有一个风险,它可能会被拦截之间的浏览器和您的服务器,但您可以减轻这种情况,通过使用HTTPS。
有一个风险,它可能会被拦截之间的电子邮件客户端和浏览器,但有没有什么你可以做的可能性,用户有恶意软件在他们的系统上,旨在分享您的一次性密码。这是一个相当遥远的可能性摆在首位,虽然。
电子邮件有被拦截的风险,但你对此无能为力,除非你想强迫用户投资设置和学习如何使用GPG或类似的东西。(这是一个小风险)。
重新编辑:
我担心他们会用一个不存在的电子邮件地址注册,并通过查看网络选项卡进行验证
您的一次性代码应与它通过电子邮件发送到的电子邮件地址关联。
在用户单击该电子邮件中的链接之前,它不会显示在网络选项卡中。因此,如果电子邮件地址不真实的,他们就无法获得代码。
您已经将代码与数据库中的特定电子邮件地址相关联,因此他们无法改变主意并将该代码用于其他电子邮件地址。
nfeuvbwi3#
您的流程本身可能不正确。正确的流程如下:
1.获取用户在表单中输入的电子邮件ID。
1.当用户单击验证按钮时,将电子邮件ID发送到您的后端
1.生成一个随机的otp代码对该电子邮件在您的后端
1.将OTP & EMAIL & TIMESTAMP存储为后端数据库中的条目
1.通过数据库条目中的电子邮件发送otp
1.要求用户通过检查他的电子邮件并将OTP粘贴到您的表单中来验证OTP
1.然后用户提交表单-在后端,OTP和电子邮件一起用于检索数据库条目,并且如果找到它,并且在时间戳的X时间量内-针对用户帐户注册来自数据库条目的电子邮件
1.设置一个定期数据库清除过程,以删除时间戳早于X时间的所有条目。注意-如果使用REDIS,您甚至可以将条目设置为在X时间后自动过期,因此根本不需要此步骤+时间戳。
如果在这个过程中,用户在任何时候更改了电子邮件ID,无论是在表单中还是通过一些黑客,都不会找到db条目,OTP也永远不会验证。
这样,用户就不可能在事后操纵他的电子邮件ID。如果出于某种原因,用户突然希望更改其电子邮件ID,则整个流程必须重新启动。