2011-01-20 120 views
8

在時間我花了從學習PHP如何支持Unicode我一直在鑽研使我的「記住我」餅乾安全些休息片刻。然而,有一些我不明白的東西,還有一些我自己的想法,我想提出一些建議和意見。PHP:記住我和安全?

1)是否有采用「記住我」的功能,不涉及任何的cookie的方法?很好奇,因爲存儲身份驗證Cookie存在明顯的安全漏洞。並不是說每件事都沒有安全風險。

2)因爲我不跟銀行或「高度敏感」信息的工作,是否有必要要求用戶輸入自己的密碼更「高調」的領域?如果我們只是在兩分鐘後要求他們實質上登錄,記住登錄名就會很浪費。

3)什麼是從「根本」)中存儲的身份驗證cookie(除了絕對的最佳方法是什麼?我目前編碼該區域以在Cookie中設置單個標記(使用time(),其用戶代理,remote_addr和salt - sha256)進行散列。當所述用戶回來時,它檢查令牌的'會話'表,然後將IP與IP相匹配以登錄它們。如果令牌存在但IP不匹配,則它默默取消cookie,並要求它們以如果他們沒有一個。

再次感謝大家。

+0

您應該重新使用現有的驗證框架只要有可能,因爲它確實很複雜。例如,看一下https://github.com/delight-im/PHP-Auth您需要在客戶端爲您要做的事情提供持久性存儲 - 因此,Cookie是理想的選擇。 – caw 2016-09-21 02:51:53

回答

6
  1. 本質上沒有。它需要客戶端的某種存儲;您無法知道客戶沒有Cookie(或類似HTML 5客戶端存儲)的身份。

  2. 這是一個權衡,你必須決定。最小值,舊密碼或其他形式的確認(電子郵件?)應該被要求將其更改爲新的。

  3. 你不能絕對防止餅乾盜竊及後續模擬除非你加密所有通信。這是唯一的安全方法。 當然,將一個IP,用戶代理等與cookie關聯可能會有所幫助,但依靠加密更容易且更安全。(這裏我誤會了一點 - 什麼是在cookie的值重要的是,它是隨機的,所以你應該改變你的代方法是難以預料)

+0

1)不這麼認爲,但我認爲它可能值得反問可能的激進想法。 ;)2)我肯定會要求舊密碼來更新任何信息,如電子郵件,用戶名,密碼等。我主要是爲了購買任何東西(它是一個遊戲網站,所以用戶將有這樣的選擇),交易其他用戶,那種事情。 3)我實際上是指存儲/檢查系統(它按照我的初始描述工作的方式),而不是加密或不加密。 – Zydeco 2011-01-20 05:09:13