2015-04-15 47 views
1

我想知道的是,雖然在PHP MySQL的做數據庫操作,那麼是不是真的安全地保存在會話陣列中的所有DB值類似如下直接在Session Array中保存PHP數據庫值是否安全?

$query = "select * from `users` where `mails` = ? and passx= ? "; 
$result = DB::instance()->prepare($query)>execute 
      (array($m,$s))->fetchAll(); 
foreach($result as $row){ 
    $user[] = $row; 
    $_SESSION['user'] = $user; 
} 

恐怕所有數據庫列名都可以在會話數組。如果還有其他方法,請告訴我。

+0

服務器上的會話文件中的列名不會比代碼中的安全。所以這是一個可以接受的做法,並且很好地使用了'$ _SESSION'。事實上,它們可能更安全,因爲操作系統將對會話存儲文件執行嚴格的讀取權限。 –

+0

看起來這個查詢只返回一行 - 例如,您不希望將表的全部內容檢索到'$ _SESSION'中。 –

+0

它只返回一行,但不同的值,如名稱,地址,電話號碼等等和細節ll b自動填充(如果在db中可用) – Gags

回答

1

是的,$ _SESSION數組是私有的,除非php被配置爲將會話文件保存在可公開訪問的位置或服務器存在安全漏洞,否則將永遠不會顯示給用戶。但是,會話可以從用戶那裏竊取,其他人可以使用某些特定的方法登錄。

如何防止會話固定here

而且相關閱讀起來:Where is data stored in a session?

順便說一句,你可以使用reset()代替的foreach()的數組中的返回第一個關鍵。

+0

爲什麼要使用'reset()' – Gags

+0

使用reset()可以簡單地執行'$ _SESSION [用戶'] =重置($結果);'而不是foreach循環。我自己曾經使用foreach來訪問密鑰我不知道過去的名字,但重置使它更清潔。 – Digits

+0

真棒:)歡呼 – Gags

0

簡而言之,如果您沒有在var_dumping $_SESSION附近運行,或者對從$_SESSION分配的數據進行管理不當,那麼$_SESSION的內容將無法真正被客戶端攔截。它只存儲在服務器上。

即使會話被劫持(它有自己的一套問題和擔憂),但這並不意味着$_SESSION的內容完全暴露。

+0

對於那些誰downvoting,我很好奇,知道爲什麼。我堅持我的回答。 –

+0

我認爲有人低估了你已經編輯你的帖子10次......這是不好的做法。想想之前,然後發帖 – Gags

+0

好的建議,我會牢記在心。我沒有意識到這是不好的禮節。 –

相關問題