0

所以我的问题有点奇怪,不知道怎么解释清楚。

我目前正在测试我的网站,每个页面顶部都有一个登录表单,所有这些都由模板处理,因此每个登录表单的代码都是相同的。我有不同级别的文件,我的根目录看起来像这样:

/index.php
/photos.php
/videos.php
/users/login.php
/users/register.php
/users/forgot-password.php

我当前使用的密码中包含一个"。这一切都在服务器的根目录(index.php、video.php、photo.php)上运行良好,但由于某种原因,一旦我进入文件(/users/login.php、/users/register.php)我无法登录我的帐户。我发现如果我像这样逃脱我的密码,\"它就可以工作。

我什至将文件 index.php 复制到用户文件夹中,也存在同样的问题。

这是我生成密码哈希的函数:

function generateHash($plainText, $salt = null)
{
    global $db;

    $plainText = trim($db->sql_escape($plainText));


    if ($salt === null)
    {
        $salt = substr(md5(uniqid(rand(), true)), 0, 25);
    }
    else
    {
        $salt = trim($salt);
        $salt = substr($salt, 0, 25);
    }

    return $salt . sha1($salt . $plainText);
}

现在我真的迷路了,我不知道该怎么做,所以我希望你能帮助我并找到答案。

4

2 回答 2

1

您可能会体验到曾经激活的magic_quotes_gpc 设置的影响,该设置已被不当禁用,例如魔术引号处于活动状态,但另外带有密码的INSERT 也是mysql 转义的。如果稍后禁用魔术引号,则不会将额外的反斜杠添加到密码中。

很难说如何修复它。一个好的方法可能是首先实际尝试纯密码,但如果失败,请使用“addslashes($password)”再次尝试。

由于您只存储散列密码,因此无法修复原始密码。

于 2012-10-04T18:03:19.877 回答
0

SQL 没有理由转义任何东西,除非它被直接插入到查询中。因此,该sql_escape电话是您问题的根源。

需要注意的是,使用 MD5 散列实际上等同于使用纯文本密码,因为盐渍的破解时间是如此之低以至于难以测量。

于 2012-10-04T17:59:18.570 回答