如何在“检查”php代码或页面中检查权限?
我使用explode和in_array
用户登录后在“检查”页面中,如果用户具有“dataDisplay”权限,则代码必须检查用户的权限。但“检查”页面中的代码不执行此操作
在“检查”页面代码
中我的错误这是我的数据库:
+--------------------+-------------------------------+
| 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");}
?>
答案 0 :(得分:1)
您忘记添加其他阻止,如果您正确缩进代码,可能会遇到的问题。 确保仅在找到用户
时才创建会话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
}
正如其他人在评论中指出的那样prevent SQL injection。
答案 1 :(得分:0)
其他人指出的else
是个问题。
user_previllige
中的明显拼写错误。
在else
区块中,您引用$uname
和$row['user_previllige']
,但这些内容仅在if
区块中有意义;如果您在else
区块中,则它们未定义。
您确定已连接到数据库吗?我看到$link
,但您没有在上面的代码中包含用于启动连接的代码。
正如其他人所指出的那样,极易受到SQL注入攻击。
此外,不以纯文本格式存储密码!加盐并哈希。假设它们将在某一天被盗,并设计你的应用程序以使其无关紧要,因为盐渍和散列的值将毫无用处。