【问题标题】:Linking two user accounts together将两个用户帐户链接在一起
【发布时间】:2016-02-27 14:29:28
【问题描述】:

我正在为我的网站用户构建一种方法,将他们的帐户链接在一起,以便他们之间可以共享资源。到目前为止,我的流程是:

  • 1) 用户输入他想要链接的用户的电子邮件地址。
  • 2) 如果找到匹配项,这些用户会收到一封电子邮件。
  • 3) 电子邮件包含确认链接。如果收件人点击此按钮,两个帐户之间将建立连接。

我想知道在这最后一步中我需要多安全。我的确认链接格式为:domain.com/link-confirm.php?fromid=xxx&toid=yyy

理论上,任何人只要知道目标的用户 id,就可以欺骗此链接,从而在未经许可的情况下建立连接。

我尝试对两个用户 ID 进行哈希处理,然后扫描用户数据库以查找匹配项,但 password_verify 函数运行时间过长,导致页面超时(而且只有 1000 个用户)。

我想知道的是: 我上面的计划有意义吗? 有没有更简洁的方法? 我担心欺骗是否正确(连接帐户本身并不会在用户之间共享任何数据,它只是让任何一个用户都可以发起)?

谢谢

【问题讨论】:

  • 您可以只加密两个 id 值,然后从 get 获取它 - 解密它们,这里不需要使用哈希值。这样一来,有人暴力欺骗他们将需要数千年的时间。
  • 加密、散列或生成 URL 中的信息。 url?id=somegeneratedstring 并且您应该有一个表格,可以将散列或生成的字符串转换为用户名和辅助用户名 id。通过添加在 INSERT 上更新的额外时间戳列,您还可以设置链接到期时间。
  • 感谢所有回复。 @n-dru:我接受了你的加密想法,它工作得很好。将其发布为答案,我会接受。
  • @Rob 谢谢,很高兴听到这个消息!好的,我添加了答案。

标签: php user-accounts


【解决方案1】:

您可以只加密两个 id 值,并在从 get 获取它之后 - 解密它们,这里不需要使用哈希值。这样一来,有人暴力欺骗他们需要数千年的时间。

【讨论】:

    【解决方案2】:

    您可以做的是为每个帐户关联请求生成一些唯一数据,并要求将这些唯一数据与关联接受请求一起发送。

    因此,例如用户 A 请求与用户 B 链接,您将请求与一些唯一数据(如随机哈希和时间戳)一起存储,然后当用户 B 在其电子邮件中单击“接受”时,他会被发送到一个页面在您的服务器上。电子邮件中的链接包含提交到页面的唯一数据。您检查唯一数据是否确实是用户 A 提交请求时生成的数据,如果是,则繁荣,用户链接。

    【讨论】:

      猜你喜欢
      • 2021-05-01
      • 2018-04-10
      • 2017-01-26
      • 2023-02-15
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多