簡體   English   中英

無法拉取使用PASSWORD()函數的信息表單數據庫

[英]can't pull info form database that uses PASSWORD() function

我有這個用戶登錄過程頁面。 此時用戶已輸入信息,所有這些都有效,但我無法弄清楚如何將加密的密碼從數據庫中提取出來。 我需要用PASSWORD()函數提取並且不知道如何。 我知道這不是最好的方法,但它是作業所要求的。 我有問題部分注釋掉我認為那需要修復。

//sets $query to read usnername and passowd from table
$query = "SELECT username,password,first_name,last_name FROM jubreyLogin WHERE username      
= '$userName' AND password=password('$userPassword')";
$result = mysql_query($query,$db);
if(mysql_error())
{
echo $query;
echo mysql_error();
}

//reads data from table sets as an array
//checks to see if user is already registered
while($row=mysql_fetch_array($result))
{
if($userName == $row['username'] /*&& $userPassword == ($row['password'])*/)
{
    $login = 'Y';
    $welcome = "Welcome" . " " .$row['first_name']. " " .$row['last_name'];
    $userName = $row['username'];

}
}

if ($login='Y')
{

    setcookie('name',$welcome,time()+60*60*24*30);

    setcookie('login',"Y",time()+60*60*24*30);
    $_SESSION['username_login'] = $userName;
    header('Location: welcome.php');
}

這是我應該首先發布的修改后的代碼我需要它來檢查用戶輸入的密碼,在這種情況下$ userPassword帶有加密密碼,如果它匹配,它會將用戶發送到網站的下一頁。

您不需要以明文形式查看密碼(即使您想要也不能)。 當您在密碼和用戶名上檢查記錄時,您不需要檢查if()語句。 如果找到任何行,則表示用戶名/密碼組合是succesfful,用戶可以被視為已登錄。

編輯:更新的代碼對實際邏輯沒有任何影響。 邏輯保持不變,您使用用戶名和加密密碼查詢數據庫,如果匹配意味着用戶有權登錄,那么您繼續設置cookie /會話數據並重定向。 雖然我沒有真正看到登錄cookie和歡迎cookie的需要,但您可以簡單地在會話中輸入用戶名,fname和lname。 如果以下頁面上的會話包含用戶名,則表示用戶已登錄。

代碼可以是這樣的:

//sets $query to read usnername and passowd from table
$query = "SELECT username,first_name,last_name FROM jubreyLogin WHERE username = '$userName' AND password=password('$userPassword')";
$result = mysql_query($query,$db);
if(mysql_error())
{
    echo $query;
    echo mysql_error();
}

// were any rows returned?
if(mysql_num_rows($result)){
    list($userName, $firstName , $lastName) = mysql_fetch_row($result);
    $welcome = "Welcome" . " " .$firstName. " " .$lastName;

    setcookie('name',$welcome,time()+60*60*24*30);
    setcookie('login',"Y",time()+60*60*24*30);
    $_SESSION['username_login'] = $userName;

    header('Location: welcome.php');
}

你不應該加密密碼,你應該對它們進行哈希處理。 嘗試使用像phpass這樣的庫來保證安全。 您需要做的是散列密碼並將散列值存儲在數據庫中。 當用戶登錄時,您將對它們提供的密碼進行哈希處理,並將其與數據庫中的哈希值進行比較。 如果哈希匹配,則提供的密碼是正確的。 如果沒有,則向用戶發送錯誤。 您永遠不需要能夠以純文本形式獲取密碼以驗證用戶。

另外,請確保使用mysql_real_escape_string()或預處理語句轉義變量,否則您的腳本將容易受到SQL注入攻擊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM