Php 这个登录方法安全吗
我为一个客户的网站做了以下管理员登录,我只是想问一下这个方法是否安全,我在数据库中使用了一个userID cookie检查和一个“is the administrator online”条目,出于安全原因,我也会检查这个条目 对不起,如果我的格式是坏的,我会接受任何提示,请耐心等待我,我是一个新手程序员,刚刚进入阶段“客户的第一个项目”Php 这个登录方法安全吗,php,mysql,security,Php,Mysql,Security,我为一个客户的网站做了以下管理员登录,我只是想问一下这个方法是否安全,我在数据库中使用了一个userID cookie检查和一个“is the administrator online”条目,出于安全原因,我也会检查这个条目 对不起,如果我的格式是坏的,我会接受任何提示,请耐心等待我,我是一个新手程序员,刚刚进入阶段“客户的第一个项目” 不,这是有缺陷的。有几个问题 统计拥有相同密码的用户数是没有意义的(第二次查询) md5哈希不足以存储密码。如果攻击者能够访问数据库,他可以轻松找到密码。你必
不,这是有缺陷的。有几个问题
- 统计拥有相同密码的用户数是没有意义的(第二次查询)
- md5哈希不足以存储密码。如果攻击者能够访问数据库,他可以轻松找到密码。你必须用盐李>
- 在数据库中保存isonline没有任何意义。如果用户未注销,则数据库中的访问权限将永久保留李>
- 您将用户标识保存在cookie中。它不安全,因为它很容易被欺骗李>
- 最后但并非最不重要的一点是,您的代码已打开以进行SQL注入(一次来自查询字符串变量,两次来自Cookie实例)
md5()
不是一个好主意,现在有了更有效的散列算法,如bcrypt
等。您还应该使用参数化查询,然后在完成所有这些操作后,尝试自己打破它!如果用户名与任何记录匹配,并且密码与任何记录匹配,则此代码允许用户登录。我想你会想为一个用户在这两方面都匹配!
<?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>";
};
}
?>