2016-04-08 51 views
1

我們假設一些使用會話參數的驗證數據從一個PHP頁面傳遞到另一個頁面。Php會話數據是否安全?

我怎麼能確定在第二個php頁面上,這個會話數據仍然是我在第一個php頁面上驗證的數據?據我所知,會話數據存儲在用戶計算機上的cookie中。那麼是什麼阻止了用戶將損壞的數據注入到會話cookie中呢?

因爲在我的情況下,我需要依靠的事實,傳遞到第二頁的數據已經驗證。

所以主要問題是如何將驗證數據安全地從一個頁面傳遞到另一個頁面?

提前許多感謝, 弗洛

+1

否。會話數據存儲在服務器上。您可以將會話數據存儲在cookie上,但是,php通常不會這樣做,您必須自己實施它。長話短說,會議應該足夠安全。 – Andrew

+1

所有存儲在cookie中的內容都是會話標識(PHPSESSID)。您的數據安全地保存在您在php設置中指定的目錄中。你無法避免的是讓用戶不要更改他的PHPSESSID,這也不是問題,因爲他不會將信息添加到會話目錄中。 PHP只是丟棄無效的ID並生成新的ID。 –

+0

[Laravel 4會話變量是否安全?](http://stackoverflow.com/questions/31948725/are-laravel-4-session-variables-secure) –

回答

3

會話數據本身存儲在服務器端。唯一存儲在客戶端計算機上的是具有唯一標識符的cookie,因此服務器知道在服務器端加載哪個會話。

用戶不能操縱存儲在會話本身中的數據,因此從這個意義上說,會話是安全的。

當然,cookie本身可能會被用戶盜用並被其他用戶使用(稱爲「會話劫持」)。您可以通過例如將會話鎖定到其IP地址,瀏覽器版本等,並使用HTTPS來防止人們嗅探連接來保護您的用戶。

+1

我知道會話劫持的實踐。因爲最近我讀了這本書「瀏覽器黑客手冊」(非常好的安全相關程序員閱讀)這使我有點偏執我猜^^。但會話劫持並不是真正的問題,因爲用戶可能知道數據,但他們不能改變它。 非常感謝在這方面 – flxh

1

不要存儲會話數據的cookie .Store在服務器端$ _SESSION []中的會話數據。例如

<?php 
session_start(); 
// VALIDATION CODE 
$_SESSION['name'] = 'Validation name'; 
?> 

現在在第二頁檢查此會話是否設置。如果設置,那麼用戶驗證

<?php 
session_start(); 
if(isset($_SESSION['name'])){ 
// USER IS VALIDATED 
}else{ 
// UNAUTHORiZED Access 
} 
?> 

這將是服務器端,所以你不需要一次又一次驗證。 謝謝

+0

你可能想說:「......你不需要再次驗證」。否則我不明白 – flxh

0

從我所瞭解的會話數據存儲在用戶計算機上的cookie中。

不是。

會話數據存儲在服務器上,並通過cookie與特定用戶+瀏覽器關聯。

通過編輯cookie中的用戶只能:

  • 訪問別人的Cookie(不太可能)
  • 獲取一個新的空會話

注意,還有一個會議cookie這是數據存儲在客戶端的地方。這是一個沒有過期數據的常規cookie,當瀏覽器關閉時這些數據將過期。這種類型的Cookie通常用於在客戶端上存儲會話ID。

+0

對不起,胖手指投票 - 這是手機故障 –

+0

@Dagon - 你可以再次點擊它,以刪除它 – Quentin

+0

是對不起它的手機,你試圖打你下來,它得到了鎖定,但我相信你會活下來的代表損失:-) –

1

會話數據只存儲在服務器端,從而在會話的用戶不能編輯任何東西,所以它會被保存到假設第1頁驗證的數據將是第2頁。

// Page1.php 
// Set the session on page 1 
session_start(); 
$_SESSION['myValue'] = 'secure_value'; 

// Page2.php 
// Get the session on page 2 
session_start(); 
$validValue = $_SESSION['myValue']; 
相同的數據

不要在cookie中存儲任何敏感信息,因爲這些存儲在客戶端&可以改變!