2013-11-22 100 views
1

我想知道什麼是創建登錄過程的正確方法。什麼是創建安全登錄過程的正確方法?

到目前爲止,我認爲這將是一種創建$_SESSION['login']甚至$_COOKIE['login']的好方法,它們都具有相同的內容,這是一種時間戳和加密形式的密碼。

背後的想法的邏輯是檢查是否同時存在,並對其內容進行比較。如果兩者都存在並且內容相同,則可以訪問受保護的頁面。

我知道Cookie是一種會話。 Cookie將被存儲在用戶客戶端網站和會話中,但只會在瀏覽器打開時纔會保存。我認爲即使瀏覽器關閉並會話被破壞,也可以延長會話的生命週期。

這應該確保會話不能被黑客攻破和COOKIE被偷走什麼使得它不可能被黑客獲得訪問某個用戶的個人資料。

我說得對與想法或你怎麼做的人呢?

非常感謝。

+1

你明白如何劫持會話,會話工作做了?如果是這樣,爲什麼存儲一個額外的cookie更安全呢? (提示:不是。) – deceze

+0

嗨,不,我不知道它是如何工作的。我只知道這是可能的。我也知道Session是一種Cookie,但我認爲不可訪問。 – bonny

回答

4

首先你需要了解會話和餅乾之間的區別。

會話和cookie都是key =>值存儲。但其中它們存儲對它們的安全屬性有很大的影響。

Cookie存儲在客戶機上。他們是不安全。用戶可以修改cookie的值,忘記cookie,發送更多cookie等。Cookie可以存儲很長時間(數月,數年)。由於客戶端存儲cookie,因此您不必過多擔心空間限制。請記住,所有Cookie都隨每個請求一起發送。你存儲在cookies

事情通常是像一些偏好設置或「我已經看到您的彈出問我關於問卷調查」相當無關緊要的事情。

會話數據存儲在服務器上,只有服務器可以從中讀取和寫入。用戶永遠不會看到會話中的內容。會話數據通常很快到期,比如說30分鐘到24小時之間的任何地方。

但是,您如何知道哪個會話屬於哪個訪問者?那麼,你使用會話標識符cookie。 這是您需要驗證的唯一Cookie,您需要。在PHP中,此cookie爲PHPSESSID,當您致電session_start();時,它會自動創建並使用。會話cookie是一個具有難以「猜測」的隨機值的cookie,這使得它很安全。

用戶將保留會話cookie。您可以找到相關的會話數據(自動使用$_SESSION)。在會話數據中,您可以存儲用戶是否已登錄,如果是這樣的用戶,甚至可以存儲用戶擁有的權限(如小型高速緩存)。你可以把它當作一個不可篡改的鍵=>值存儲,只要確保不要在那裏存儲太多(限制取決於存儲機制)。

會話存儲在一個特定的地方;取決於你的網絡服務器和操作系統。在PHP中,您可以通過調用session_set_save_handler來指定您自己的會話存儲處理程序。這使您可以將會話數據保存在數據庫中。

如果會話標識cookie的值以某種方式暴露出來,攻擊者可以利用劫持會話。它可以通過在WiFi接入點上使用不安全的連接來暴露(例如在酒吧中)。爲了抵制這種使用HTTPS;通過HTTPS發送的cookies經過加密並可以安全抵禦這種中間人攻擊。這就是Firesheep插件(2010年)

+0

你好,謝謝。我不明白的是如何檢查價值。我怎麼能比較服務器會話的價值將在客戶端網站的相同,因爲我沒有表,我可以讀出來? – bonny

+0

如果你調用'在session_start();'PHP會自動找到該訪問者的會話(使用'PHPSESSID'餅乾 - 如果沒有'PHPSESSID'的cookie,你會得到一個新的空會話)。您可以手動獲取並創建會話,但不需要。調用'session_start();'會話全局'$ _SESSION'可用。您可以檢查與'SESSION_ID設置會話標識符的值()' – Halcyon

+0

類似,如果「($ _COOKIE [」 XY「] ===‘1’)」會是這樣的,如果「($ _SESSION === session_id())'對嗎? – bonny

相關問題