2013-07-24 152 views
0

我正在開發一個使用PHP的門戶網站,並且需要實現一個簡單的PHP身份驗證系統,該系統根據用戶憑據限制訪問某些頁面。通過身份驗證保護網頁

我有一個函數CheckAuth()需要一個參數(整數)。也就是說,我的數據庫有五個授權級別1-5。如果我調用CheckAuth(3),如果用戶的授權等級爲3或以上,則返回true。我的代碼,現在讀:

if(!CheckAuth(3) { 
    die("Sorry, we were unable to deliver the requested content."); 
} 

這種解決方案的問題是,它會破壞頁面的佈局,作爲其他元素,如頁面的頁腳將不顯示。

有條件地只顯示頁面的一部分的最佳方式是什麼?

在此先感謝! 達里奧

function CheckAuth() { 

require("config.php"); 

//User ain't been logged in?  
if(!isset($_SESSION["login"])) { 

    return 0; 
} 

//Alright user is logged in, lets check the level... 
//1 = User, 2 = OP (or Admin) 

$query = "SELECT * FROM delegations WHERE id=" . $_SESSION["login"]; 
$results = mysqli_query($con, $query); 

while($row = mysqli_fetch_array($results)) { 

     return $row["Level"]; 

} 
} 
+0

這個問題可能會派上用場:http://stackoverflow.com/questions/1181105/how-safe-are-php-session-variables請注意,控制會話變量中的身份驗證可以被操縱 –

+0

如果你正在添加進一步的代碼將不會執行。你可以嘗試echo而不是 – 2013-07-24 17:05:23

+0

嗨達里爾,謝謝,我會看看你的鏈接。這是一個小項目,本質上登錄主要是爲正確的人提供正確的內容,以便不會意外地編輯其他人的內容,但沒有「敏感」或「有價值」的信息,因此不太可能有人會想要違反該網站。基本安全是行動中(即:防止SQL注入等) – MrD

回答

1

解決辦法是不使用die()但渲染頁面的另一個版本。

if (!CheckAuth(3)) { 
    // render error page 
} else { 
    // render normal page 
} 
+0

Web框架使用的結構化方法可以幫助你很多。但最後,這只是簡單的選擇 – JimiDini

+0

Hi @Jimi,謝謝! :d – MrD

0

你不應該問if (!CheckAuth(3))你最好走的if (CheckAuth(3))的方式,如果用戶查看內容的許可顯示頁面的數據,如果沒有他重定向到一個403頁這樣的事情

if(CheckAuth(3)) 
    { 
     //display page content 
    } 

    function CheckAuth($permissionLevel) 
    { 
    require("config.php"); 

    //User ain't been logged in?  
    if(!isset($_SESSION["login"])) { 

     return 0; 
    } 

    //Alright user is logged in, lets check the level... 
    //1 = User, 2 = OP (or Admin) 

    $query = "SELECT * FROM delegations WHERE id=" . $_SESSION["login"]; 
    $results = mysqli_query($con, $query); 

    while($row = mysqli_fetch_array($results)) { 

     if($row["Level"] == $permissionLevel) 
     { 
     return true; 
     } 

    } 
    header("Status: 403 Forbidden"); 
    header("Location: /403.html"); 
    exit; 
    } 
相關問題