PHP 登录表单有时会从密码中转义特殊字符



所以我的问题有点奇怪,真的不知道如何解释清楚。

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

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

我当前使用的密码中包含"。这一切都在服务器的根目录(索引.php,视频.php,照片.php)上运行良好,但是由于某种原因,一旦我进入文件(/users/login.php,/users/register.php),我就无法登录我的帐户。我发现,如果我像这样转义密码"它就可以工作了。

我什至将文件索引.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);
}

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

您可能会遇到曾经处于活动状态的magic_quotes_gpc设置的效果,该设置已被不正确地禁用,例如魔术引号处于活动状态,但此外,带有密码的INSERT也是mysql转义的。如果稍后禁用了魔术引号,则不会将额外的反斜杠添加到密码中。

要说如何修复这一点并不容易。可能一个好方法是先实际尝试纯密码,但如果失败,请使用"addslashes($password)"添加另一个尝试。

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

没有

理由对 SQL 进行转义,除非它直接插入到查询中。因此,sql_escape电话是您问题的根源。

请注意,使用 MD5 进行哈希处理实际上等同于使用纯文本密码,因为加盐的破解时间太短以至于难以测量。

最新更新