【发布时间】:2012-09-21 21:14:49
【问题描述】:
下面的代码来自一个登录脚本,用 PHP 编写。它检查密码的数据库使用 MD5 加密密码,但是当登录脚本检查数据库的密码时,它正在检查未加密的原始密码。我熟悉 md5() 函数,但如何将其合并到以下内容中:
<?php
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
if ($username && $password) {
$connect = mysql_connect("host", "user", "password") or die("Couldn't connect");
mysql_select_db("dbname") or die("Couldn't find the database");
$query = mysql_query("SELECT * FROM users WHERE username='$username'");
$numrows = mysql_num_rows($query);
if ($numrows != 0) {
while ($row = mysql_fetch_assoc($query)) {
$dbusername = $row['username'];
$dbpassword = $row['password'];
}
if ($username == $dbusername && $password == $dbpassword) {
echo "You're in! Click <a href='../member.php'>here</a> to enter the member page.";
$_SESSION['username'] = $username;
}else{
echo "Incorrect password";
}
}else{
die("That username does not exist.");
}
}else{
die("Please enter a valid username and password.");
}
?>
【问题讨论】:
-
将
$password == $dbpassword更改为md5($password) == $dbpassword应该可以。 -
您的代码容易受到著名的 SQL 注入攻击。
-
仍在研究 mysql_escape_real_string() 的东西
-
MD5 是 nowhere near good enough 用于此目的。
-
在接触 mysql_escape_real_string 之前,使用 mysli 或 PDO 代替准备好的语句。现在真的不需要继续学习mysql_*了。
标签: php mysql encryption login md5