-5

在数据库中设置 md5 加密,然后在 login.php 中我使用 select 语句进行匹配:

<?php
    session_start();
    include"db.php";
    if ( isset( $_POST['email_id'] ) ) {
        $email_id = $_POST['email_id'];
        $password = $_POST['password'];
        $sql="SELECT * FROM user WHERE email_id='$email_id' AND password='md5($password)' LIMIT 1";
        $res = mysql_query($sql);
        $count = mysql_num_rows($res);
        if ( $count == "1" ) {
            $row = mysql_fetch_array($res);
            $name = $row["first_name"];
            $_SESSION["name"] = $name;
            $_SESSION["password"] = $password;
            header("location:index.php");
            exit();
        } else {
            echo "Invalid LOGIN information.";
            exit();
        }
    }
?>

将显示消息“无效的登录信息”。

4

3 回答 3

4

你需要连接你的字符串

$sql = "SELECT * FROM user 
        WHERE email_id='$email_id' 
        AND password='".md5($password)."' LIMIT 1";

或者最好这样做

$password = md5($fetched_password);
$sql = "SELECT * FROM user 
        WHERE email_id = '$email_id' 
        AND password='$password' LIMIT 1";

而且您不必使用LIMIT 1查询HAS来获取唯一行,否则您的数据库设计不正确,此外,电子邮件,我使用唯一用户 ID

于 2013-04-18T17:57:52.800 回答
1

这个 OP 怎么样,而不是使用 md5 来存储密码,为什么不使用 bcrypt?有一个很棒的库,叫做 password_compat,它可以为您完成所有繁重的工作。谷歌密码_compat。

接下来我建议使用 PDO 而不是 Mysql_ 函数,因为它们不再受支持。

为什么要按我说的做?

Md5 最初是在早期实现文件检查的。即使使用 sha1/2 仍然不够用现在的计算能力。使用 bcrypt 破解密码对系统来说是极其昂贵的。所以请看bcrypt。

为什么要使用 pdo?因为与其使用可能使您容易受到注入攻击的 Mysql 函数,您可以参数化您的值以更好地防止注入。您的第一个问题是安全 OP,而不是您尝试实现的逻辑。我希望你是最好的。

于 2013-04-18T18:15:22.200 回答
1
 $sql="SELECT * FROM user WHERE email_id='$email_id' AND password='md5($password)' LIMIT 1";

你已经检查过你的mysql表了吗?该条目应该md5(YOUR_PASSWORD)代替 md5 哈希...

您不能内联 php-code / 将 mysql-functions 放入引号中:

MySQL有一个MD5函数:

 $sql="SELECT * FROM user WHERE email_id='$email_id' AND password=MD5('$password') LIMIT 1";

或者使用 PHP 的 md5 函数:

 $sql="SELECT * FROM user WHERE email_id='$email_id' AND password='".md5($password)."' LIMIT 1";

ps:如果你使用MySQL方式,别忘了用mysql_real_escape_string

于 2013-04-18T17:59:47.660 回答