簡體   English   中英

此特權代碼有什么問題?

[英]what's wrong in this code of privilege?

如何在“檢查” 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");}

?>

您忘記添加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注入

  1. else指出的其他問題。

  2. user_previllige的明顯錯字也是。

  3. 在您的else塊中,您引用$uname$row['user_previllige'] ,但是這些東西僅在if塊中有意義; 如果您在else塊中,則它們是未定義的。

  4. 您確定已連接到數據庫嗎? 我看到$link ,但是您沒有在上面的代碼中包含用於啟動連接的代碼。

  5. 正如其他人指出的那樣,這非常容易受到SQL注入的攻擊

  6. 另外, 請勿以純文本形式存儲密碼 鹽和哈希他們。 假設它們有一天會被盜,並設計您的應用程序就沒關系了,因為鹽值和哈希值將毫無用處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM