簡體   English   中英

如何讓我的PHP文件正確地從數據庫中調用密碼?

[英]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.

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