2016-11-07 80 views
0

我无法通过此代码登录,因为我使用了crypt功能,并且当我想要登录时密码检查与密码表单数据库的编码有问题,并将其与密码匹配输入:使用密码登录在php

$username = $_POST['username']; 
$password = $_POST['password']; 
$check_error=0; 
include ('connect-db.php'); 

$username = mysql_real_escape_string($username); 
$password = crypt($password, '$2a$07$usesomesillystringforsalt$'); 
if (crypt($user_input, $digest) == $digest) 
if ($check_error != 1){  
    $result = mysql_query ("SELECT * FROM user WHERE username = '$username' AND password = '$password'"); 

    $count = mysql_num_rows($result); 
    if($count > 0){ 

     session_start(); 
     $_SESSION['username'] = $_POST['username']; 
     $_SESSION['password'] = $_POST['password']; 

     echo "login<br /><br />"; 
    } 
    else{ 
     echo "not login!<br />"; 
    } 
} 
+3

哇......这里有很多错误。为什么你要把密码放在$ _SESSION中?什么是'$ user_input'和什么是'$ digest'?因为这些变量都不在您的代码中。在if(crypt($ user_input,$ digest)== $ digest)'之后,你还缺少一个开始插入符。另外,在你尝试匹配它之前,你似乎在'$ password'上运行crypt(),这是错误的。你运行类似'if(crypt($ _ POST ['password'],$ valuefromdatabase))=== $ valuefromdatabase)' – junkfoodjunkie

+5

1.您使用的是古老的API,我强烈建议您切换到'mysqli_'或PDO **准备好陈述**。 2.在会话中存储密码是一个坏主意。 – Qirel

+2

**警告**:编写您自己的访问控制层并不容易,并且有很多机会使其严重错误。请不要在[Laravel](http://laravel.com/)等任何现代开发框架(http://codegeekz.com/best-php-frameworks-for-developers/)上编写自己的认证系统,内置了强大的[认证系统](https://laravel.com/docs/5.2/authentication)。绝对不要遵循[推荐的安全最佳实践](http://www.phptherightway.com/#security)和**从不将密码存储为纯文本**。 – tadman

回答

0

我做到了!

$username = $_POST['username']; 
$password = $_POST['password']; 
include ('connect-db.php'); 

$username = mysql_real_escape_string($username); 
$hash= 'atvfbgirejgtjrgjdfpgkjdpfkjgdSTYjj!'; 
$check=password_verify($password,$hash); 
$load=mysql_query ("SELECT * FROM users WHERE username='$username' AND password='$password'"); 

if($load){ 

    session_start(); 
    $_COOKIE['username'] = $_POST['username']; 
    $_COOKIE['password'] = $_POST['password']; 

    echo "You Are Login<br /><br />" 

} 
else{ 

    echo "Wrong Information! Not Login<br />"; 
} 

mysql_close(); 
+0

我在网站上的密码通常是'\'OR 1 = 1或1 = \'2' – Martin

+1

您是否阅读过上述评论? –