2010-04-08 94 views
2

我已經創建了一個登錄頁面和註冊頁面,現在我想用它來密碼保護頁面和具有顯示該用戶特定信息的頁面。登錄系統和會話(php)

會存儲登錄到Session變量的用戶的用戶ID是否是安全正確的方式?

用戶將會話變量更改爲不同的ID並訪問其他用戶的信息,而不必在用戶登錄信息中鍵入會有多容易?

編輯:將張貼每個頁面的用戶ID到下一個更安全嗎?

+0

不要$ _POST什麼!,甚至更少的用戶ID,這是一個巨大的安全漏洞。 – Ben 2010-04-08 18:04:39

+0

我將用戶從索引頁輸入的密碼發佈到登錄頁面,是嗎? – 2010-04-08 20:51:35

+0

當然這很好!如果你想要更高的安全性,你可以使用加密的密碼,然後在你的登錄頁面中解密。 – nik 2010-04-09 15:28:28

回答

0

雖然我不知道的任何方式,其中,用戶可以操縱的信息$_SESSION除非你的代碼(或您的服務器上的代碼)允許他們,所以不要做任何瘋狂的喜歡...

foreach($_POST as $key=>$value) { // DON'T DO THIS 
    $_SESSION[$key] = $value; // DON'T DO THIS! 
} // WHY ARE YOU DOING THIS!? 

你不應該做任何這樣的事情,你只要把用戶給你的任何數據放在你的$_SESSION變量中。像數據庫一樣,寫入會話應該被認爲是一種輸出形式,並且您應該相應地清理您放入的內容(以及放置的位置)。因此,除非你正在做這樣瘋狂的事情(你可能會這樣;它可能會更微妙),我認爲你不必擔心用戶改變會話變量。您可能不必擔心threats of a shared hosting environment,某個可能不是最終用戶的人正在操作會話信息。

會話標識符並不那麼安全,因爲hijack a session in PHP有一些簡單的方法。

我建議查看我已經鏈接到的那本書,Essential PHP Secutiry。對於幾個基本的PHP安全概念來說,這是一個非常小而直接的(但是徹底的)解釋,其中許多概念都可以概括,並且在做任何web開發工作時應該牢記在心。

1

下面是一個

如果你在這樣,只有你的PHP腳本可以解密,那麼你應該是安全的我猜的方式加密的用戶名。

+0

我只是在會話中存儲用戶標識。 – 2010-04-08 16:09:05

0

我將談談默認的會話行爲,在這裏:會議是基於cookie的「PHPSESSID」,它被設置爲MD5校驗和(32個字母數字字符)。 PHP從瀏覽器接受這個cookie,並使用它來加載服務器端會話數據。客戶端沒有直接的方式來修改會話中的數據,但卻可以指定他們自己的會話ID。

您可以添加額外的安全層(SSL,檢查客戶端IP等),但默認情況下,如果我知道您的cookie,我可以有效地登錄您。至於多麼「容易」,那就取決於很多其他安全層次:是否有人在嗅探您的流量,是否安裝了惡意軟件等。

Suhosin這樣的工具會嘗試提高會話安全性。

+0

客戶端IP經常發生變化,因此檢查這將意味着當用戶不在時,用戶會被告知他們是攻擊者。 – 2010-04-08 16:08:38

+0

Suhosin(作爲一個例子)可以限制其檢查到第一個,兩個或三個八位字節。 – 2010-04-08 16:36:02