2016-02-27 81 views
0

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

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

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

从理论上讲,如果任何人知道其目标的用户标识,从而在未经许可的情况下建立连接,任何人都可能欺骗该链接。

我试着哈希两个用户标识符,然后通过用户数据库扫描匹配,但password_verify函数需要很长时间才能运行,页面超时(并且只有1000个用户)。

我想知道的是: 我上面的计划是否有意义? 有没有更好的方法来做到这一点? 我是否有权利关注欺骗行为(连接帐户本身并不共享任何数据,它只是使用户可以启动)?

感谢

+1

你可以对两个id值进行加密,并在获取它之后 - 解密它们,不需要在这里使用哈希值。那样的话,需要数千年的时间才能让某人暴力欺骗他们。 –

+1

在URL中加密,散列或生成信息。 'url?id = somegeneratedstring',你应该有一个表格将散列或生成的字符串转换为用户名和二级用户名。通过添加更新的'INSERT'的附加时间戳列,您还可以设置链接到期时间。 – Xorifelse

+0

感谢所有的回复。 @ n-dru:我采用了你的加密思路,它的工作非常整齐。发布它作为答案,我会接受它。 – Rob

回答

1

你可以对两个id值进行加密,并在获取它们之后 - 解密它们,不需要在这里使用哈希值。那样的话,需要数千年的时间才能让某人暴力欺骗他们。

0

你可以做的是产生每个帐户的连接请求,一些独特的数据,并要求独特的数据与连接接受请求被发送。

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

相关问题