Php 管理员登录到用户帐户

Php 管理员登录到用户帐户,php,mysqli,login,admin,Php,Mysqli,Login,Admin,我有一个非常简单的登录脚本,它可以按照您的预期进行,并检查数据库中电子邮件和密码组合之间的匹配。尽管我想知道是否有一种方法可以编辑此脚本,以便管理员可以使用如下用户电子邮件: user@hotmail.com 还有一个主密码什么的: master123 要访问系统上的任何帐户?以下是我当前的脚本: <? session_start(); require_once("system/db.php"); if($_POST['submit']){ $email_add

我有一个非常简单的登录脚本,它可以按照您的预期进行,并检查数据库中电子邮件和密码组合之间的匹配。尽管我想知道是否有一种方法可以编辑此脚本,以便管理员可以使用如下用户电子邮件:

user@hotmail.com

还有一个主密码什么的:

master123

要访问系统上的任何帐户?以下是我当前的脚本:

<?
session_start();
    require_once("system/db.php");

    if($_POST['submit']){

    $email_address = $conn->real_escape_string($_POST['email_address']);
    $password = md5($_POST['password']);
    $stay_logged_in = $_POST['stay_logged_in'];


 if (empty($email_address) === true || empty($password) === true) {
     header('Location: login.php?loginerror=3');    
 } else {

    $sql1 = "SELECT * from ap_users WHERE email_address = '{$email_address}' LIMIT 1";
    $result1 = $conn->query($sql1);
    if (!$result1->num_rows == 1) {
        header('Location: login.php?loginerror=4');
    } else {


    $sql2 = "SELECT * from ap_users WHERE email_address = '{$email_address}' AND blocked='0' LIMIT 1";
    $result2 = $conn->query($sql2);
    if (!$result2->num_rows == 1) {
        header('Location: login.php?loginerror=6');
    } else {


    $sql = "SELECT * from ap_users WHERE email_address = '{$email_address}' AND password = '{$password}' LIMIT 1";
    $result = $conn->query($sql);
    if (!$result->num_rows == 1) {
        header('Location: login.php?loginerror=2');
    } else {

        mysqli_query($conn, "UPDATE ap_users SET last_login = NOW() WHERE email_address = '{$email_address}'");

        if($stay_logged_in == 1){
            setcookie("email_address", $email_address, time()+31556926 ,'/');
        } else {
            setcookie("email_address", $email_address);
        }




$length = 76;
$randomString = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
$hash = md5($randomString);
mysqli_query($conn, "UPDATE ap_users SET login_hash = '{$hash}' WHERE email_address = '{$email_address}'");
if($stay_logged_in == 1){
setcookie("hash", $randomString, time()+31556926 ,'/');
} else {
setcookie("hash", $randomString);   
}
    $value = 'yes';
    if($stay_logged_in == 1){
    setcookie("login", $value, time()+31556926 ,'/');
    } else {
    setcookie("login", $value); 
    }
    header('Location: check_gateway.php');

    } 
    }
    }
    }
    }
?> 

哪一个做得不好?有什么想法吗?

在用户表中创建一个
master\u passowrd
列,然后执行类似的查询

select * from user where `email` = '$email' AND (`password` = '$password' or `master_passowrd` = '$password')

在用户表中创建一个
master\u passowrd
列,然后执行类似的查询

select * from user where `email` = '$email' AND (`password` = '$password' or `master_passowrd` = '$password')

我这样做的方式非常简单,不需要主密码

管理员用户运行一组不同的cookie和会话,允许我以管理员身份登录,在管理员端,我可以选择要以管理员身份登录的用户,并动态创建他们的cookie和会话。这是有益的,因为:

  • 您始终知道是否是实际管理员用户登录和/或所做的更改,因为您将有2组cookie等

  • 我可以轻松地检查多个用户,而不必注销管理员,当我想更改用户时,我只需替换用户端的cookie/session信息

  • 它还增加了一层额外的安全性,因为用户不知道管理员cookie的名称(希望如此)

  • 如果您不想这样做,只需通过呼叫数据库并获取电子邮件和通行证来创建用户会话,无需主密码

    我通常也会使用双哈希密码

    sha1(md5($password))或

    md5(sha1($password))或

    md5(md5($password))

    不确定这是否对你有帮助

    编辑:如果您想使用他们的用户名登录,请在管理员端创建一个表单,例如:

    <form action="login.php" method="post" id="user_login_admin">
     <input type="text" name="user_email" id="user_email" placeholder="Enter User Email">
    <input type="submit" name="user_temp_login" id="user_temp_login" value="Admin User Login">
    </form>
    
    
    
    然后,您的新登录脚本将是:

     <?
    session_start();
        require_once("system/db.php");
    
        if($_POST['submit']){
    
        $email_address = $conn->real_escape_string($_POST['email_address']);
        $password = md5($_POST['password']);
        $stay_logged_in = $_POST['stay_logged_in'];
    
    
     if (empty($email_address) === true || empty($password) === true) {
         header('Location: login.php?loginerror=3');    
     } else {
    
        $sql1 = "SELECT * from ap_users WHERE email_address = '{$email_address}' LIMIT 1";
        $result1 = $conn->query($sql1);
        if (!$result1->num_rows == 1) {
            header('Location: login.php?loginerror=4');
        } else {
    
    
        $sql2 = "SELECT * from ap_users WHERE email_address = '{$email_address}' AND blocked='0' LIMIT 1";
        $result2 = $conn->query($sql2);
        if (!$result2->num_rows == 1) {
            header('Location: login.php?loginerror=6');
        } else {
    
    
        $sql = "SELECT * from ap_users WHERE email_address = '{$email_address}' AND password = '{$password}' LIMIT 1";
        $result = $conn->query($sql);
        if (!$result->num_rows == 1) {
            header('Location: login.php?loginerror=2');
        } else {
    
            mysqli_query($conn, "UPDATE ap_users SET last_login = NOW() WHERE email_address = '{$email_address}'");
    
            if($stay_logged_in == 1){
                setcookie("email_address", $email_address, time()+31556926 ,'/');
            } else {
                setcookie("email_address", $email_address);
            }
    
    
    
    
            $length = 76;
            $randomString = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
            $hash = md5($randomString);
            mysqli_query($conn, "UPDATE ap_users SET login_hash = '{$hash}' WHERE email_address = '{$email_address}'");
            if($stay_logged_in == 1){
            setcookie("hash", $randomString, time()+31556926 ,'/');
            } else {
            setcookie("hash", $randomString);   
            }
                $value = 'yes';
                if($stay_logged_in == 1){
                setcookie("login", $value, time()+31556926 ,'/');
                } else {
                setcookie("login", $value); 
                }
                header('Location: check_gateway.php');
    
        } 
        }
        }
        }
        }elseif($_POST['user_temp_login']){
        $email_address = $conn->real_escape_string($_POST['user_email']);
            $sql = "SELECT password from ap_users WHERE email_address = '{$email_address}' LIMIT 1";
            $result = $conn->query($sql);
                if (!$result->num_rows == 1) {
                    // no email address
                }else{
                    $length = 76;
                    $randomString = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
                    $hash = md5($randomString);
                    mysqli_query($conn, "UPDATE ap_users SET login_hash = '{$hash}' WHERE email_address = '{$email_address}'");
                    if($stay_logged_in == 1){
                    setcookie("hash", $randomString, time()+31556926 ,'/');
                    } else {
                    setcookie("hash", $randomString);   
                    }
                        $value = 'yes';
                        if($stay_logged_in == 1){
                        setcookie("login", $value, time()+31556926 ,'/');
                        } else {
                        setcookie("login", $value); 
                        }
                        header('Location: check_gateway.php');
                        }    
        }
    ?> 
    

    我的方法非常简单,不需要主密码

    管理员用户运行一组不同的cookie和会话,允许我以管理员身份登录,在管理员端,我可以选择要以管理员身份登录的用户,并动态创建他们的cookie和会话。这是有益的,因为:

  • 您始终知道是否是实际管理员用户登录和/或所做的更改,因为您将有2组cookie等

  • 我可以轻松地检查多个用户,而无需注销管理员身份,当我想更改用户时,我只需替换用户端的cookie/会话信息

  • 它还增加了一层额外的安全性,因为用户不知道管理员cookie的名称(希望如此)

  • 如果您不想这样做,只需通过呼叫数据库并获取电子邮件和通行证来创建用户会话,无需主密码

    我通常也会使用双哈希密码

    sha1(md5($password))或

    md5(sha1($password))或

    md5(md5($password))

    不确定这是否对你有帮助

    编辑:如果您想使用他们的用户名登录,请在管理员端创建一个表单,例如:

    <form action="login.php" method="post" id="user_login_admin">
     <input type="text" name="user_email" id="user_email" placeholder="Enter User Email">
    <input type="submit" name="user_temp_login" id="user_temp_login" value="Admin User Login">
    </form>
    
    
    
    然后,您的新登录脚本将是:

     <?
    session_start();
        require_once("system/db.php");
    
        if($_POST['submit']){
    
        $email_address = $conn->real_escape_string($_POST['email_address']);
        $password = md5($_POST['password']);
        $stay_logged_in = $_POST['stay_logged_in'];
    
    
     if (empty($email_address) === true || empty($password) === true) {
         header('Location: login.php?loginerror=3');    
     } else {
    
        $sql1 = "SELECT * from ap_users WHERE email_address = '{$email_address}' LIMIT 1";
        $result1 = $conn->query($sql1);
        if (!$result1->num_rows == 1) {
            header('Location: login.php?loginerror=4');
        } else {
    
    
        $sql2 = "SELECT * from ap_users WHERE email_address = '{$email_address}' AND blocked='0' LIMIT 1";
        $result2 = $conn->query($sql2);
        if (!$result2->num_rows == 1) {
            header('Location: login.php?loginerror=6');
        } else {
    
    
        $sql = "SELECT * from ap_users WHERE email_address = '{$email_address}' AND password = '{$password}' LIMIT 1";
        $result = $conn->query($sql);
        if (!$result->num_rows == 1) {
            header('Location: login.php?loginerror=2');
        } else {
    
            mysqli_query($conn, "UPDATE ap_users SET last_login = NOW() WHERE email_address = '{$email_address}'");
    
            if($stay_logged_in == 1){
                setcookie("email_address", $email_address, time()+31556926 ,'/');
            } else {
                setcookie("email_address", $email_address);
            }
    
    
    
    
            $length = 76;
            $randomString = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
            $hash = md5($randomString);
            mysqli_query($conn, "UPDATE ap_users SET login_hash = '{$hash}' WHERE email_address = '{$email_address}'");
            if($stay_logged_in == 1){
            setcookie("hash", $randomString, time()+31556926 ,'/');
            } else {
            setcookie("hash", $randomString);   
            }
                $value = 'yes';
                if($stay_logged_in == 1){
                setcookie("login", $value, time()+31556926 ,'/');
                } else {
                setcookie("login", $value); 
                }
                header('Location: check_gateway.php');
    
        } 
        }
        }
        }
        }elseif($_POST['user_temp_login']){
        $email_address = $conn->real_escape_string($_POST['user_email']);
            $sql = "SELECT password from ap_users WHERE email_address = '{$email_address}' LIMIT 1";
            $result = $conn->query($sql);
                if (!$result->num_rows == 1) {
                    // no email address
                }else{
                    $length = 76;
                    $randomString = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
                    $hash = md5($randomString);
                    mysqli_query($conn, "UPDATE ap_users SET login_hash = '{$hash}' WHERE email_address = '{$email_address}'");
                    if($stay_logged_in == 1){
                    setcookie("hash", $randomString, time()+31556926 ,'/');
                    } else {
                    setcookie("hash", $randomString);   
                    }
                        $value = 'yes';
                        if($stay_logged_in == 1){
                        setcookie("login", $value, time()+31556926 ,'/');
                        } else {
                        setcookie("login", $value); 
                        }
                        header('Location: check_gateway.php');
                        }    
        }
    ?> 
    

    要为所有用户使用主密码吗?这样管理员就可以使用主密码以任何用户的身份登录了?创建一列
    master_password
    和password,并给它一个默认值,如
    123456
    ,现在执行如下查询:-
    $sql=“SELECT*from ap_users,其中email_address='{$email_address}'和(password='{$password}或password='123456')LIMIT 1”;    旁注:
    md5()
    散列函数提供弱散列,不适合用于密码保护。当然,有一些散列算法可用。一个简单的谷歌搜索就会显示出来。最简单的方法是使用php的内置密码处理函数。请不要混淆术语“哈希”和“加密”:-@Snappysites sha1()+salt(任意salt或与用户相关的,如电子邮件+密码+任意)作业是否要为所有用户使用主密码?这样管理员就可以使用主密码以任何用户的身份登录了?创建一列
    master_password
    和password,并给它一个默认值,如
    123456
    ,现在执行如下查询:-
    $sql=“SELECT*from ap_users,其中email_address='{$email_address}'和(password='{$password}或password='123456')LIMIT 1”;    旁注:
    md5()
    散列函数提供弱散列,不适合用于密码保护。当然,有一些散列算法可用。一个简单的谷歌搜索就会显示出来。最简单的方法是使用php的内置密码处理函数。请不要混淆术语“散列”和“加密”:-@Snappysites sha1()+salt(任意salt或与用户相关的,如电子邮件+密码+任意)完成了这项工作,而这一切都有效,我感谢您的帮助,这是一个安全的方法吗?我不知道你的应用程序架构,所以我不能推荐最好的。为每个用户提供唯一的密码确实不是一个安全的好方法。访问用户数据或用户操作的最佳方法是从管理面板访问它们。与使用root用户的数据/动作(2)/登录用户一样,1/登录为root,您应该考虑这一点。例如,制作一个管理面板,您可以在其中作为用户执行操作(创建数据库条目、新闻、产品…),并读取/写入用户数据。@tomsihap是的,我同意您的看法。但我不知道他的应用程序架构和操作。我只是给了他一个想法,让他通过主密码登录用户帐户,而这一切都是有效的,我很感谢你的帮助,这是一个安全的方式来做到这一点吗?我不知道你的应用程序架构,所以我不能建议最好的一个。拥有一个唯一的密码为每个用户不是,在