此登录系统的安全性如何? (在PHP中使用Cookies)

时间:2019-04-30 08:11:46

标签: php mysql security cookies

我已经创建了一个登录页面,并且正在使用Cookies。下面是登录页面的代码:

                          寄存器     
<?php
session_start();
if(isset($_POST['submitted'])){
$errors = array();
$mysqli = new mysqli('localhost', 'db123', 'db123', 'db123');
$username = $_POST['username'];
$result = $mysqli->query("SELECT * FROM registered_users WHERE phone_number = '$username'");
$data = mysqli_fetch_assoc($result);
if($result->num_rows == 0) {
     echo 'Username Not Found!';
} elseif($data['otp_verified'] === 'false'){
echo 'OTP Not Verified, Click Here To Verify Your Number';
}
else{
    $encryptpass=md5($_POST['password']);
    $cookie_username = $_POST['username'];
    if($encryptpass == $data['password']){
    echo 'Login Is Verified';
    $Month = 86400 + time(); 
     setcookie('user', $cookie_username, $Month);
    header("location:dashboard.php");
    }
    else{
    echo 'Login/Password Incorrect :(';
    }
}
$mysqli->close();   
}

?>

最后,这是dashboard.php和所有其他受限制页面的代码:

<?php
session_start();

if(!isset($_COOKIE['user']))
{
header("location:index.php");
die();
}
?>

我的问题: 1.此登录系统的安全性如何? 2.我该如何改善? 在此先感谢:)

2 个答案:

答案 0 :(得分:1)

以下是问题/解决方案的详尽列表:

  • 您的代码由于缩进不正确而难以阅读。
  • 您应该use prepared statemens to guard against SQL-injection
  • 您会通过显示不同的错误消息来向黑客提示。当用户名正确且密码错误时,您说:“ Login / Password Incorrect :(”,但如果用户名错误,则说:“ Username Not Found!”。这样,黑客可以知道用户名是否正确,并且工作完成了一半。
  • 最好不要使用md5()进行密码加密。
  • 使用password_hash()处理密码。
  • 请勿将用户名存储在cookie中。同样,您正在泄漏信息。
  • 不使用cookie,就不需要这样做,使用会话并将信息存储在服务器上,而不是在用户的计算机上。
  • 您似乎已将用户名存储为phone_number。那么是哪一个呢?它可以是用户名或电话号码,不能同时使用。即使您使用电话号码作为用户名,也请称呼他们为真实姓名。
  • 草率编码:$errors = array();不在任何地方使用。您不检查new mysqli()的结果,连接可能会失败。 $mysqli->query()也是如此。
  • 您要关闭数据库,但是为什么不使用$result->close();释放查询结果呢?要么两者都做,要么不做。

安全性是一个困难的话题,要实现正确性确实很困难,今天可能好事,明天可能坏事。

答案 1 :(得分:0)

非常不安全

  • 可能存在sql注入(因为用户名直接进入数据库)
  • md5多年来已经过时了
  • 您保存的用户名未加密