【问题标题】:How do I sign my code using a MD5 Password? [closed]如何使用 MD5 密码签署我的代码? [关闭]
【发布时间】:2012-11-16 01:35:33
【问题描述】:

我对回答问题有点陌生,所以请耐心等待。而且我已经阅读了帖子,并且我已经看到不再使用 mysql_ 了。我知道,所以不要告诉我不要使用它。

不管怎样,我有这个代码,每当我尝试使用它注册时,密码都不会在 MD5 中进行哈希处理。我已经删除了

$mdhash = md5('$name');

因为我需要你的帮助。

代码如下:

<?php

    session_start();

    include('./dbconnect/global.php');

    if (isset ($_POST['submit'])) {
    $comment = mysql_escape_string (trim ($_POST['username']));
    $id = 0;
    $date = date("Y-m-d");
        if(!empty($_POST['username']) && !empty($_POST['password']) && !empty($_POST['email'])){
            if ($_POST['username']=="telamon" or $_POST['username']=="brick") {
                die("This username is banned");
            }
                $name = mysql_escape_string (trim ($_POST['password']));
                $mdehash = md5($name);
                $email = mysql_escape_string (trim ($_POST['email']));
                $picture = $_POST['def'];
                $tweet = 'NoTweetsTweeted';
                $g = mysql_query( "SELECT * FROM admin WHERE username='".$comment."'") or die(mysql_error());

                if (mysql_num_rows($g) >= 1) {
                    $errMsg = "<p style='color:#999999;'>That username is already registerd!</p>";
                }else {
                    if ( preg_match("/^[a-zA-Z0-9]+$/i", $comment) ) { 
                    $sql = mysql_query ("INSERT INTO admin (id,username,password,date,picture,email,twitter) VALUES ('".$id."','".$comment."','".$name."','".$date."','".$picture."','".$email."','".$tweet."')");
                    header('location: home.php');
                    }else
                    $errMsg = "<p style='color:#999999;'>Please fill all fields!</p>";
            }
        }
    }
?>

所以,如果我能得到一些帮助,那将不胜感激!提前致谢!

【问题讨论】:

  • 不要使用 md5 而是使用更安全算法的盐渍哈希。此外,您必须使用mysql_real_escape_string 而不是mysql_escape_string - 或者更好的是,使用 PDO 或 mysqli 而不是已弃用的 mysql api。
  • 您的问题是什么
  • 你在哪里使用$mdehash?您将其定义为md5($name),但稍后在您的INSERT 语句中直接使用$name
  • tl;dr; 使用现有库。这不是一个新问题,很多人都理解它非常错误。很容易出现安全错误,尤其是当真正了解它的工作原理时。还有 许多 个其他重复项显示了这一点。

标签: php mysql md5


【解决方案1】:

去掉这个语句中的单引号。

$mdhash = md5('$name');

应该是:

$mdhash = md5($name);

单引号导致美元符号按字面意思理解,因此 $name 不再是变量而是文字字符串。

【讨论】:

  • 您还可以提及为什么md5("$name") 会起作用但不好;我认为这有点适合他的问题的答案。提问者似乎是初学者,他很可能会偶然发现那种“代码”
  • 实际上我看到了你的评论,并认为它涵盖了它。希望当 PHP5.5 出来时,每个人都会抛弃旧的教程,开始使用新的密码 API。
  • @JohnConde 考虑到人们仍然“建议” hackish mysql_real_escape_string(或完全忽略 SQL 注入问题).. 我认为不会。 PHP 上/中的垃圾太多了 ..
  • 你还相信圣诞老人,不是吗? :) 我认为那里的所有垃圾都不会消失或最终不会被使用。如果 PHP 决定放弃所有废话(主要是 mysql 扩展),您将在这里看到新问题如何解决“未知函数”错误...
【解决方案2】:

看起来您将$name 传递到SQL 数据库,而不是查询中的$mdehash

我还会更改变量名称以更好地匹配它们的实际用法。它们有点令人困惑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2015-01-13
    • 2023-03-30
    • 1970-01-01
    • 2020-09-10
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多