我在我的網站上建立了一個登錄名,如果登錄成功,我會設置一個$_SESSION['user']
變量。SESSION登錄易受攻擊?
現在我保護所有內容由
if(!isset($_SESSION['user'])) {
header('Location: login.php');
}
這意味着,如果還沒有登錄成功,你直接回到登錄頁面登錄的用戶。
現在我的問題:這是安全的嗎?其他網站是否已設置$_SESSION['user']
變量?
我在我的網站上建立了一個登錄名,如果登錄成功,我會設置一個$_SESSION['user']
變量。SESSION登錄易受攻擊?
現在我保護所有內容由
if(!isset($_SESSION['user'])) {
header('Location: login.php');
}
這意味着,如果還沒有登錄成功,你直接回到登錄頁面登錄的用戶。
現在我的問題:這是安全的嗎?其他網站是否已設置$_SESSION['user']
變量?
號
您的網站的會話創建服務器計算機上的唯一散列和文件的哈希存儲在用戶的瀏覽器作爲cookie,所以當它擊中你的網絡服務器,它可以知道確切的文件讀書。
如果有任何其他網站設置相同的鑰匙$_SESSION
變量將是隻爲它的哈希,您的服務器不會讀。
你迄今所做的什麼是好的,似乎不容易,也沒有攻擊其他網站不影響你的設置會話變量,但照顧你如何處理會話一旦創建會話。還會在每次登錄時生成隨機會話令牌,並在更改密碼時更改會話令牌。
一般來說本身可以被認爲是安全的會話。問題是可以竊取會話,允許黑客完全訪問該會話中的任何內容。
由於PHP存儲會話ID作爲cookie,黑客可以簡單地通過使用XSS竊取該會話。
也許看看這裏瞭解更多信息:3210
這是正確的。這是大多數使用PHP的網站通常使用的方式。
的$_SESSION
是一個超級全局變量只能由服務器管理。
會發生什麼:
session_start()
PHPSESSID
(或任何你php.ini
命名),以加密安全值的cookie。$_SESSION
變量,它在內部存儲與關聯於所生成的Cookie值。爲什麼它不能被其他網站改變:
$_SESSION
值只存儲在內部。即使客戶知道它的價值。它只保存會話ID的Cookie,但它甚至不知道該會話ID的含義,也不知道其他人的會話ID應該是什麼。除非你是在同一臺服務器上運行的其他網站,這韓元不會成爲問題(在正常情況下)。
作爲一個側面說明,請提醒的是,你應該使用header("Location: index.php");
後添加return;
聲明。這是錯誤的常見來源,在這種情況下,它可能會使服務器面臨危險,因爲即使您的瀏覽器在收到位置標題後不顯示內容,您的服務器實際上仍在發送應該是用戶生成的,如果他已經登錄
TL; DR:如果你有一個腳本,不應該發送任何數據,如果客戶沒有登錄,header("Location: ...");
後不添加return;
聲明將使服務器仍然發送數據,但正常的瀏覽器不會顯示出來(因爲它重定向),但如果有一個人誰試圖查看發送的數據(使用作爲curl
作爲簡單的方法,不添加-L
選項)會很容易地看到他們。
會話寫入web服務器上的文件,以便其他網站可以設置一個叫做'user'會話,但它會在不同的網站進行設置,有效的在不同的網站 – RamRaider