0

如何检查“检查”php代码或页面中的权限?

我使用explode和in_array

用户登录并在“检查”页面后,代码必须检查用户是否具有“数据显示”权限..但“检查”页面中的代码不这样做

“检查”页面代码有什么问题

这是我的数据库:

+--------------------+-------------------------------+
| username           |   user_privilege              |
|--------------------|-------------------------------|
| amal               |7gz,agt_courses,newbill        | 
|                    |                               |
+----------------------------------------------------+
|                    |                               |
| ahmed              |dataDisplay,previllige,newUsers|
+----------------------------------------------------+

第一页“登录”php:

<?php
ob_start();
session_start();
include '../connection/connect.php';

$username = $_POST['username'];
$password = $_POST['password'];


if($username && $password ){
    $finduser = mysqli_query($link,"SELECT * FROM LOGIN WHERE username = '".$username."' AND password = '".$password ."'") or die("error");
    if(mysqli_num_rows($finduser) !=0){
        while($row = mysqli_fetch_array($finduser)){
            $uname = $row['username'];
            $pass= $row['password '];
            $arr=explode(",",$row['user_privilege']);
        }
    }
        {
        $_SESSION['sessionname'] =$uname;
        $_SESSION['sessionpass'] =$password ;
        $_SESSION['sessionpre'] =explode(",",$row['user_previllige']);
        header ("location:../agtSite/agt2.php");
    }
} 
ob_end_flush();
?>

第二页“检查”php:

<?php
session_start();

$_SESSION['sessionpre']='';

$haspermission =in_array("dataDisplay",$_SESSION['sessionpre']);


if( $haspermission )
{
    header("location: agt2.php");
    }

else{header("location: ../display/display.php");}

?>
4

2 回答 2

1

您忘记添加else块,如果您正确缩进代码,您可以避免这个问题。确保仅在找到用户时才创建会话

if(mysqli_num_rows($finduser) !=0){
    while($row = mysqli_fetch_array($finduser)){
        $_SESSION['sessionname'] =$row['username'];
        $_SESSION['sessionpass'] = $row['password '];
        $_SESSION['sessionpre'] = explode(",",$row['user_previllige']);
        header ("location: ../check.php");
    }
}
else{
//could not find user
}

也正如其他人在评论中指出的那样,您可以防止 SQL 注入

于 2013-11-14T17:26:11.350 回答
0
  1. else其他人指出的是一个问题。

  2. 中明显的错字也是如此user_previllige

  3. 在你的else块中,你指的是$unameand $row['user_previllige'],但这些东西只在if块中有意义;如果您在该else块中,它们是未定义的。

  4. 你确定你连接到数据库?我明白$link了,但您没有在上面的代码中包含用于启动连接的代码。

  5. 正如其他人指出的那样,这极易受到 SQL 注入的影响。

  6. 另外,不要以纯文本形式存储密码!盐和哈希它们。假设它们有一天会被盗,并设计您的应用程序以使其无关紧要,因为加盐和散列的值将毫无用处。

于 2013-11-14T21:56:20.420 回答