簡體   English   中英

PHP如何保護數據庫中的密碼

[英]PHP how to secure password in database

我正在使用來自其他服務器(不是我的服務器)的數據,我需要登錄到該服務器。 因此,我需要知道每個用戶帳戶的密碼。 我需要通過HTTP請求將此密碼發送到服務器(沒問題)。 但是服務器需要不安全的密碼。

因此,如果密碼為“ 123456”,則必須發送包含數據的POST請求:

"username=user&password=123456"

我無法使用md5函數,因為在此之后我無法找回密碼,因此我的問題是如何編碼此密碼? 是否存在一些通用的PHP函數? 例如:

$securePassword = php_encode("123456", "mykey")
php_decode($securePassword, "mykey")

因為我只是不想存儲到我的數據庫“ 123456”

哈希的重點是您不能對其進行解密。 要檢查是否有人輸入了正確的密碼,請對輸入的內容進行哈希處理,然后將其與數據庫中密碼的哈希進行比較。 如果匹配,則密碼正確。 否則,這是錯誤的。 另外,只要您使用SSL和體面的哈希算法,就應該是安全的。

如果您的PHP> 5.5,則可以使用函數password_hash 如果您的較低版本大於PHP 5.3.7,則應使用password compat

使用mcrypt_encrypt()mcrypt_decrypt()
更多信息SO POST

您所尋找的不是如何保護密碼,而是如何確保密碼的傳輸 您可以使用傳輸層安全性(也稱為TLS或SSL)來執行此操作。

也就是說,實際上不建議以這種方式傳輸密碼,應該設計出更好的機制。 如果您對密碼進行加密或散列並傳輸密文,則根本無法提供任何保護因為攻擊者只會像您一樣簡單地發送密文。

您需要加密傳輸中的數據。 在您的網站上獲取SSL設置。

有一個原因,密碼是散列而不是加密的。 您無法解密哈希。 通常,慣例是執行以下操作:

創建密碼

  1. 將新密碼發送到服務器
  2. 散列密碼
  3. 將哈希存儲在數據庫中

檢查密碼

  1. 將密碼發送到服務器
  2. 散列密碼
  3. 檢查哈希是否與數據庫中存儲的哈希匹配

為此,您應該使用類似SHA256的方法:

// check password
$hash = hash('sha256', $password);
$db_hash = db_get_password($username, ...);
if ($hash == $db_hash) { 
    // correct password
}

暫無
暫無

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

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