2016-11-07 81 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

您是否閱讀過上述評論? –