所以我的问题有点奇怪,并不知道如何解释清楚。
我目前正在测试我的网站,每个页面顶部都有一个登录表单,所有这些都是由模板处理的,因此每个登录表单的代码都是相同的。我有不同级别的文件,我的根目录看起来像这样:
/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);
}
现在我真的迷路了,我不知道该怎么做才能做到这一点,所以我跳起来你可以帮我找到答案。
答案 0 :(得分:1)
你可能会遇到一次激活的magic_quotes_gpc设置的效果,该设置已被错误地禁用,例如:魔术引号是活跃的,但另外带密码的INSERT也是mysql转义的。如果稍后禁用魔术引号,则不会将附加反斜杠添加到密码中。
要说明如何修复它并不容易。可能一个好方法可能是首先尝试使用普通密码,但如果失败,请添加另一个尝试“addslashes($ password)”。
由于您只存储散列密码,因此无法修复原始密码。
答案 1 :(得分:0)
除非将SQL直接插入到查询中,否则没有理由对SQL进行任何转义。因此,sql_escape
电话是您问题的根源。
作为一个注释,使用MD5进行哈希实际上相当于使用纯文本密码,因为盐渍的开裂时间很短,难以测量。