2012-02-23 103 views
1

我使用一個用戶管理腳本會話PHP會話和限制MySQL訪問

會話對象$與loggedInUser包含以下屬性:

$loggedInUser->email 
$loggedInUser->user_id 
$loggedInUser->hash_pw 
$loggedInUser->clean_username 

用戶能夠從「form.php的」提交數據通過POST到 處理腳本'process.php'

'form.php的'有權訪問前面提到的Session對象。 這是目前在提交的Cookie發送形式:

PHPSESSID=7ec81164c9fb2cdc4c6f47a00bc2ae50 

問:

如何確保「process.php」到savely只允許登錄用戶提交數據?

*據我所知,'process.php'只能由我的服務器訪問,而不是用戶,因此我必須通過Cookie,Get或Post提交會話對象,這些都很容易被篡改與,是嗎?*

如果合適的話,你會使用提交的Cookie或檢查驗證?

自動櫃員機很容易,知道'process.php'的路徑,在沒有登錄狀態的情況下「僞造」提交。

感謝您經驗豐富的程序員的智慧:)。

+0

將表單發送到PHP_SELF,我可以將INSERT包裝到基於SESSIONS的條件中嗎? – Email 2012-02-23 23:37:52

回答

2

在會話中存儲$loggedInUser,並在process.php中檢查$_SESSION['loggedInUser']->isLoggedIn()(或通常確定用戶是否登錄)。

攻擊者可以欺騙session_id,但不能欺騙它的內容。 https://www.owasp.org/index.php/Session_fixation

+1

但是,你可能不應該在會話中存儲密碼哈希,只有像用戶名/用戶ID這樣的良性數據。 – prodigitalson 2012-02-23 23:53:29

+0

但是process.php中的會話對象如何提供?用戶沒有用他的瀏覽器訪問這個文件,請求是從我的服務器的文件form.php中獲得的。我在這裏理解錯誤嗎?我認爲讓SESSIONobject成爲可用的唯一方法是通過COOKIE,POST,GET或將表單發​​送給自己! – Email 2012-02-23 23:56:55

+0

@Email你說用戶提交form.php到process.php。我認爲你有一個形式與'action =「process.php」'。在process.php中轉儲'$ _SESSION'並找出你自己。 – 2012-02-23 23:58:32