2016-02-27 84 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提交請求時生成的數據,如果是這樣,則繁榮,用戶鏈接。

相關問題