2013-07-24 106 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; 
    } 
相关问题