2016-02-11 50 views
0

後,我的登錄頁面,我的所有其他網頁都無法進入,除非你已經登錄,基本上檢查,如果你登錄我有一個簡單的if else語句:使用session_start()保護頁面有多安全?

session_start(); 
if (isset($_SESSION['id'])) { 
    // Show the page 
} else { 
    // Ask the user to log in 
} 

而對於管理頁面我有一個額外檢查:

session_start(); 
if (isset($_SESSION['id']) && $_SESSION['isAdmin'] == TRUE){ 
    // Show the page 
} else { 
    // Unauthorised access 
} 

這是保護PHP頁面的安全方法嗎?

+1

是的資源... –

回答

2

是的,這是安全的方式。並嘗試在頁面頂部添加<?php if(!session_id()) session_start(); ?>,因爲如果您已將此頁面包含在另一個頁面中並且會話已在該頁面中啓動,則會話將被取消,並且此頁面容易出現未經授權的用戶。

+0

啊!神奇的支票,謝謝你的提示。 –

1

創建一個函數,然後調用這個函數,當你加載頁面..這函數返回true,如果你登錄或沒有,然後你可以管理你的URL重定向錯誤..

if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) { 
    echo "Welcome to the member's area, " . $_SESSION['username'] . "!"; 
} else { 
    echo "Please log in first to see this page."; 
} 

this lucks good ..

+0

都是正確的,但在我看來,第一個解決方案提供了更好的兩個... :) – Nikunj

+0

是的,我總是喜歡使用這第一種方法.. –

1

這取決於。 所有的PHP會話變量都存儲在服務器端。會議由session_start();開始。 PHP在您的計算機上設置一個臨時cookie,名爲PHPSESSID,設置爲在瀏覽會話結束時過期。使用這個cookie PHP服務器將值分配給會話變量。當你註銷(即session_destroy();),這PHPSESSID cookie值由無用

關於這個不安全位,如果有人真的偷了你的PHPSESSID cookie的值,這個人可以簡單地設置該PHPSESSID餅乾他們的計算機上,並獲得甚至無需輸入任何用戶名或密碼即可進入會議。但是,如果您在Web服務器上使用SSL/HTTPS,則可以緩解這種情況。必須在使用session_start();的地方執行。您必須強制使用會話的SSL/HTTPS。如果您只是使用SSL/HTTPS進行登錄,並且在會話的其餘部分使用HTTP,這並不會使您安全,因爲通過HTTP以明文形式發送了Cookie。

據我所知,破壞PHP會話機制的唯一方法是使用中間人攻擊來竊取PHPSESSID cookie,如果您擁有有效的SSL證書並且使用強力密碼套件爲您的網絡服務器。這個cookie還可以使用正確製作的XSS攻擊來檢索,如果您使用preg_replace以正確的正則表達式從PHP輸入過濾到您的PHP代碼,則可以減輕javascript或等效性。

+0

神奇,我們一定會購買SSL證書。感謝您提供的深入信息,我想深入瞭解您提到的很多內容! –