php - 这种登录方式安全吗

标签 php mysql security

我对客户的网站进行了以下管理员登录,我只是想问一下这种方法是否安全,我使用了 userID cookie 检查以及数据库中的“管理员是否在线”条目,我也检查了该条目安全原因。

抱歉,如果我的格式不好,我会接受任何提示,请耐心等待,我是一个刚刚进入“客户的第一个项目”阶段的新手程序员。

<?php
include_once('config.php');
if(isset($_POST['usr']) && isset($_POST['pwd'])){
    $usr=$_POST['usr'];
    $pwd=md5($_POST['pwd']);

    $userquery="SELECT * FROM nexus_administrators WHERE user='".$usr."';";
    $execuser=mysqli_query($con,$userquery);
    $usrnum= mysqli_num_rows($execuser);

    $pwdquery="SELECT * FROM nexus_administrators WHERE pwd='".$pwd."';";
    $execpwd=mysqli_query($con,$pwdquery);
    $pwdnum= mysqli_num_rows($execpwd);

    $query="SELECT adminid FROM nexus_administrators WHERE pwd='".$pwd."' AND user='".$usr."';";
    $result=mysqli_query($con,$query);
    $row=mysqli_fetch_array($result);
    $uid= $row['adminid'];

    echo $uid;
    if($usrnum==1 && $pwdnum==1){
        setcookie("uid", $uid, time()+3600*1000);
        $puthimonline= "UPDATE nexus_administrators SET isOn=1 WHERE adminid='".$uid."';";
        mysqli_query($con,$puthimonline);
        header('Location: adminpanel.php');

    }


}

//Ai n-ai cookie dai la poarta
if (!isset($_COOKIE['uid'])){
    echo " INTRUS !!!!";
    echo " </br> Zbori sau o s**i pe ciuperca";
}else{
    //te verific si-n baza
    $query= "SELECT * FROM nexus_administrators WHERE adminid='".$_COOKIE['uid']."' AND isOn=1;";
    $result=mysqli_query($con,$query);
    if(mysqli_num_rows($result)!= 1){
        header('Location: index.php');
    }else{
        if(isset($_GET['log'])){
            $puthimoffline= "UPDATE nexus_administrators SET isOn=0 WHERE adminid='".$_COOKIE['uid']."';";
            mysqli_query($con,$puthimoffline);
            header('Location: index.php');
        }



        echo "hello my dear admin";



        echo"
        <a href='adminpanel.php?log=0'> Log Out</a>";


    };
}



?>

最佳答案

不,这是有缺陷的。有几个问题。

  • 计算具有相同密码的用户数量是没有意义的(第二个查询)
  • md5 哈希值不足以存储密码。如果攻击者能够访问数据库,他就可以轻松找到密码。你必须使用盐。
  • 在数据库中保存 isonline 没有任何意义。如果用户不注销,访问权限将永远保留在数据库中。
  • 您将用户 ID 保存在 cookie 中。它不安全,因为它很容易被欺骗。
  • 最后但并非最不重要的一点是,您的代码对于 SQL 注入(inject)是开放的(一次来自查询字符串变量,两次来自 cookie)。

关于php - 这种登录方式安全吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25127277/

相关文章:

javascript - Safari 上的单选按钮标签点击计时

php - 在php中删除数组中的双引号?

php - Insert Collection to saveMany Eloquent

mysql - 如何在 phpmyadmin 3.3.7 中定义表关系?

php - 如何将登录脚本中的安全性从 MD5 更新为更安全的内容?

c# - CSharpCodeProvider - 它可以被滥用吗?

php - PHP和MySQL:mysqli_num_rows()错误。怎么了?

mysql - 如何在一个 sql 查询中计算多个表中的行数

php - MySQL 连接两个表的多条记录

php - 将未加密的密码发布到 HTTPS 服务器是否不安全?