所以我的问题有点奇怪,真的不知道如何解释清楚。
我目前正在测试我的网站,我的每个页面顶部都有一个登录表单,所有这些都由模板处理,因此每个登录表单的代码都相同。我有不同级别的文件,我的根目录看起来像这样:
/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 进行哈希处理实际上等同于使用纯文本密码,因为加盐的破解时间太短以至于难以测量。