我在制作登录页面时遇到了一些麻烦。我仍然是PHP编程的初学者,但是如果它获得了正确的登录和ID或正确的登录和电子邮件,我的登录系统可以工作,但它不能用于密码。
密码在注册页面上的加密方式如下:
$Salt = base64_encode(md5($Login.$Pass, true));
这是我登录系统的一部分:
$Login = StrToLower(Trim($_POST['login']));
$Password = Trim($_POST['passwd']);
$Password = "0x".md5($Login.$Password);
$sql = "select * from users where name ='".$Login."' and passwd ='".$Password."' ";
提前致谢。
答案 0 :(得分:1)
问题在于,当您存储密码时,您将其加密,如:
base64_encode(md5($Login.$Pass, true))
当您检查密码时,您说密码是加密的,如:
"0x".md5($Login.$Password);
举个例子: 我正在使用user =' user'和密码='密码'
您存储的密码如1ECu0YmhP/lw2sfn6PmHsg==
,当您检查密码时,这是0xd5745f9425eceb269f9fe01d0bef06ff
测试代码:
$ php -a
php > echo base64_encode(md5('user'.'password', true));
1ECu0YmhP/lw2sfn6PmHsg==
php > echo "0x".md5('login'.'password');
0xd5745f9425eceb269f9fe01d0bef06ffphp >
建议:
msqli
或PDO
(推荐)阅读:http://php.net/manual/en/book.pdo.php password_hash
阅读:http://php.net/manual/en/function.password-hash.php& http://php.net/manual/en/faq.passwords.php 答案 1 :(得分:1)
在为您的登录代码投入任何额外的精力之前,我强烈建议您花时间研究SQL注入和PHP参数化查询功能的主题。发布后,您的代码是一个登录代码的教科书示例,通过SQL注入很容易入侵。
目前,在我看来,只需在“名称”登录字段中输入以下内容即可让我每次都登录:
' or True;
我很抱歉这不是您问题的直接答案,但我还没有使用评论的声誉点。我们都必须开始在某个地方学习,但是在PHP学习过程中不能早期编写登录功能。即使经过多年的经验,很多人仍然会建议永远不要使用自己的身份验证,而是使用现有的框架(我认为是好的建议)。
答案 2 :(得分:0)
我不确定你是否得到了Lea Tano的答案。
您不需要解码base64。
你需要编码!!! :-)所以改变你的代码:
$Login = StrToLower(Trim($_POST['login']));
$Password = Trim($_POST['passwd']);
$Password = base64_encode(md5($Login.$Password, true));
$sql = "select * from users where name ='".$Login."' and passwd ='".$Password."' ";