2014-03-06 45 views
1

我有兩種形式將數據添加到數據庫。第一種形式要求提供基本的細節(姓名,電子郵件,電話等)並存儲它們。更進一步,用戶可以將選項添加到他們的賬戶(例如接收通訊,接收促銷等)直接從POST值設置SESSION變量

第二種形式使用會話變量來驗證用戶是誰:當他們登錄或註冊時,他們的電子郵件地址設置爲會話變量,像這樣:

$_SESSION['buyer_email'] = $_POST['email']; 

但是我所有的被提交到數據庫中的數據使用PDO其進行消毒它在提交之前,所以我的問題是:

是上述代碼行可安全使用?它並沒有像這樣被消毒,雖然我不能想到我頭頂上的任何東西都是他們以任何方式操縱這個直接的POST - > SESSION?

使用PDO提交數據,然後從數據庫中檢索電子郵件並將返回的值設置爲會話變量或者這是多餘的和不必要的,會更好嗎?

+0

最好不要相信用戶輸入,並在將它設置爲會話變量之前檢查'$ _POST ['email']'中是否有正確的電子郵件(格式)。 – djot

+2

您使用放入會話中的值的任何地方都是一個問題。規則#1 - 驗證輸入,逃逸輸出。 – Shazbot

+0

所以你說我應該做的東西*與郵政價值(如我懷疑!) - 即時通訊做的所有正常的東西到電子郵件地址(例如格式,PDO的東西等),那麼它是有道理的將會話變量從通過檢查並進入數據庫的值中設置? – Giovanni

回答

4

我假設你打算使用$_SESSION['buyer_email'] - 就像顯示它一樣。爲了避免像跨站點腳本等問題,你應該總是逃避它然後使用它。

+0

不,會話變量僅用於驗證 - 顯示的用戶數據將來自數據庫。 – Giovanni

+0

驗證它,將其轉義,將其發送到數據庫,然後從數據庫中檢索它並將會話變量設置爲它。這樣,存儲的電子郵件地址將與會話變量相同(當然也是安全的),因此可以通過在數據庫中查看會話電子郵件來識別用戶是誰? – Giovanni

+0

如果該值剛剛設置爲未使用,那麼沒有理由逃避它。但是,這是一個很好的做法。這種方式後來你決定要顯示它,這將是安全的。 –