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

时间:2012-10-04 17:54:31

标签: php forms login escaping

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

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

/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复制到users文件夹中,也存在同样的问题。

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

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);
}

现在我真的迷路了,我不知道该怎么做才能做到这一点,所以我跳起来你可以帮我找到答案。

2 个答案:

答案 0 :(得分:1)

你可能会遇到一次激活的magic_quotes_gpc设置的效果,该设置已被错误地禁用,例如:魔术引号是活跃的,但另外带密码的INSERT也是mysql转义的。如果稍后禁用魔术引号,则不会将附加反斜杠添加到密码中。

要说明如何修复它并不容易。可能一个好方法可能是首先尝试使用普通密码,但如果失败,请添加另一个尝试“addslashes($ password)”。

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

答案 1 :(得分:0)

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

作为一个注释,使用MD5进行哈希实际上相当于使用纯文本密码,因为盐渍的开裂时间很短,难以测量。