【问题标题】:Hide parameter sent via POST request隐藏通过 POST 请求发送的参数
【发布时间】: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


【解决方案1】:

无法隐藏通过 POST 请求发送的 OTP。最好的办法是使 OTP 基于时间,并限制它的有效期。 无论如何,在网络选项卡中可见的请求仅对相应用户可见,因此没有实际的安全风险。希望这能澄清你的问题。您可以继续执行相同的过程。

【讨论】:

  • 您好@Aditya,我进行了编辑。我希望它能为这个问题提供新的视角。
【解决方案2】:

你不能。

您通过电子邮件将其发送到电子邮件客户端需要阅读的地方,然后需要将其传输到用户的浏览器,以便浏览器可以通过网络将其发送回。

用户的浏览器和电子邮件客户端属于用户。它们在用户的控制之下。它们不能用于向用户隐藏信息。


但这应该没关系。这是一个一次性代码,旨在证明用户就是他们声称的那个人。用户是否得到它并不重要。


它可能会在浏览器和您的服务器之间被拦截,但您可以通过使用 HTTPS 来缓解这种情况。

电子邮件客户端和浏览器之间可能会被截获,但对于用户在其系统上存在旨在共享您一次性密码的恶意软件的可能性,您无能为力。不过,这首先是一个非常遥远的可能性。

电子邮件存在被拦截的风险,但除非您想强迫用户投资设置和学习如何使用 GPG 或类似工具,否则您无能为力。 (同样,这是一个小风险)。


重新编辑:

我担心他们会使用不存在的电子邮件地址注册并通过查看网络标签来验证它

您的一次性代码应该与它通过电子邮件发送到的电子邮件地址相关联。

在用户单击该电子邮件中的链接之前,它不会显示在网络标签中。因此,如果电子邮件地址不真实,他们就无法获取代码。

您已经将代码与数据库中的特定电子邮件地址相关联,因此他们无法改变主意并将该代码与不同的电子邮件地址一起使用。

【讨论】:

  • you can mitigate that by using HTTP...假设您的意思是 HTTPS? :-)
  • 糟糕,错字。固定。
  • 您好,先生,我进行了编辑。我希望它能为这个问题提供新的视角。
猜你喜欢
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多