![](/img/trans.png)
[英]How to make PHP code check if inserted current password is correct password from MySQL database
[英]How to make my PHP files call the password from the database properly?
我目前正在一個網站上工作,它有一個注冊PHP文件,可以將數據發送到數據庫。 為了安全措施,我設置了一個密碼加密文件,用於加密用戶輸入的密碼,因此無法在數據庫中找到。 不幸的是,當用戶嘗試從登錄PHP文件連接到數據庫時,它拒絕他們訪問登錄,因為代碼連接到數據庫密碼,但它沒有從其加密代碼“清理”密碼,並且服務器無法識別密碼。 我將在下面提供我的代碼:
Signup.php
$p = $_POST['p'];
$cryptpass = crypt($p);
include_once ("php_includes/randStrGen.php");
$p_hash = randStrGen(20)."$cryptpass".randStrGen(20);
的login.php
$p = md5($_POST['p']);
如何更改上面提供的Login.PHP行,以便將密碼從其加密值清除為用戶實際知道並首先輸入的密碼?
ps $ p =用戶輸入的密碼
好的,所以一旦你從用戶那里得到密碼,你就會在插入數據庫時加密它。 這需要一個稱為“鹽”的額外數據。 鹽是獨一無二的,你決定你想要它。 但是你需要它來加密和解密所以重要的是你不要失去它! 我將它保存在自己的文件中,並在需要時使用包含。 以下是PHP
$key_salt = 'lettersandnumbers';
現在用於密碼加密假設您在變量中有用戶名和密碼,如此...
$user_id = "usersId";
$password = "usersPassword";
這是將它們放入數據庫的方法...使用以下數據創建變量
$insertdata = sprintf("INSERT INTO $table (user_id, password,) VALUES ('%s', AES_ENCRYPT('%s', '$key_salt'))", $user_id, $password);
mysql_query($insertdata);
注意AES_ENCRYPT('%s', '$key_salt')
這是加密的原因,看看它如何使用$key_salt
以及'%s'
(這是$password
)
這些組合使得幾乎不可能破解
這將解密密碼並將其放入變量中,然后你可以用它做你想要的事情....
$results = mysql_query("
SELECT AES_DECRYPT(password, '$key_salt') as password FROM $table where AES_DECRYPT(password, '$key_salt')='$password'");
$row = mysql_fetch_array($results);
$decryptedpassword = $row['password'];
我將在這里添加第二個答案,當涉及到您將從數據庫插入或繪制的任何用戶輸入時,這更加安全。 當您使用MySql
您希望清理任何用戶輸入以防止數據庫注入,這是進入數據庫的最簡單方法。
這是一個偉大的衛生腳本。 首先制作一個單獨的PHP文件,然后將此代碼復制/粘貼到其中。
<?php
// Sanitize User Input
function sanitize($data){
// apply stripslashes if magic_quotes_gpc is enabled
if(get_magic_quotes_gpc()){
$data = stripslashes($data);
}
// a mySQL connection is required before using this function
$data = mysql_real_escape_string($data);
return $data;
}
?>
現在,將此頁面包含在您將與db交互的任何頁面上
<?php require("sanitize.php"); ?>
注意:在調用函數之前,您必須已經連接到db IE: mysql_connect("mysql",$mysqlusername,$mysqlpassword);
從現在開始,它非常簡單。 假設您從帖子中分配變量,就像這樣
$password = $_POST["password"];
要清理此輸入,您可以執行此操作
$password = sanitize($password);
這有助於通過刪除與修改或顯示數據庫信息相關的某些字符來防止MySql注入。
希望這可以幫助!
除非您將加密密碼保存在數據庫中,否則不要將加密密碼與隨機字符連接,否則 - 您永遠無法將用戶輸入與保存的加密密碼進行比較。 只需使用:
$p_hash = $cryptpass;
並且在Login.php腳本中不使用md5($_POST['p']);
這是不同的散列方法,但也使用crypt()
函數:
$p = crypt($_POST['p']);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.