【发布时间】:2017-08-29 06:57:18
【问题描述】:
我目前正在测试 md5 不要以纯文本形式存储密码。 我正在处理 2 个文件,第一个文件注册用户并将密码的 md5 插入数据库中。 第二个文件是 login.php 我尝试用户登录的地方,将输入密码的哈希值与存储的密码的哈希值进行比较, 在测试 2 个值与 echos 相等后,标头重定向不起作用,如果有人可以给我一些提示,这是我的 login.php 代码:
<?php
include("../config.php");
session_start();
if($_SERVER["REQUEST_METHOD"] == "POST") {
// username and password sent from form
$myusername = mysqli_real_escape_string($db,$_POST['username']);
$mypassword = mysqli_real_escape_string($db,$_POST['password']);
$sqlx = "SELECT passcode FROM jdashboard WHERE username = '".$myusername."'";
$resultx = mysqli_query($db,$sqlx);
$rowx = mysqli_fetch_array($resultx,MYSQLI_ASSOC);
$storedpass=$rowx['passcode'];
$enc_password = md5($mypassword);
/*echo $enc_password;
echo "<br>";
echo $storedpass;*/
/*
$compare=strcmp($string1,$string2);
*/
$sql = "SELECT id FROM jdashboard WHERE username = '$myusername' and passcode = '$mypassword'";
$result = mysqli_query($db,$sql);
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
$active = $row['active'];
$count = mysqli_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count == 1) {
$admin=0;
//session_register("myusername");
$_SESSION['myusername'] = 'myusername';
$sql = "SELECT admin FROM jdashboard WHERE username = '".$myusername."'";
$result = mysqli_query($db,$sql);
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
$admin= $row['admin'];
$_SESSION['login_user'] = $myusername;
if ($admin=='1'){
header("location: welcome.php");
}
else if ($admin=='0' && $storedpass == $enc_password){
header("location: https://one.potentiallead.com/dshb/usr");
}
else {
$error = "Your Login Name or Password is invalid";
} }
}
?>
提前谢谢你!
【问题讨论】:
-
您的数据库在散列密码之前对其进行了转义。想想为什么这是个坏主意。
-
如果我直接访问welcome.php会发生什么?
-
你好,你会被重定向到login.php,一会儿再考虑之前的评论
-
请参阅 Php 的
password_hash()作为使用 md5 进行哈希的替代方法,这是不建议的。然后就像您在 $sqlx 代码中所做的那样,从您的数据库中提取哈希值。然后,您使用password_verify()将数据库版本与用户提供的版本进行比较。