簡體   English   中英

這對用戶登錄和驗證是否足夠安全? (PHP,MySQL,Sessions)

[英]Is this safe enough for user login and verification? (PHP, MySQL, Sessions)

只是想確保我沒有錯過任何明顯的東西。 需要你的家伙專業知識。

數據庫中的用戶數據: - 密碼存儲為crypt(),其中存儲在用戶表中的salt字符串。

會話: - 當用戶正確登錄時,我在會話表中創建一個具有唯一sha256哈希會話ID的新行。 我也在那里存儲user_id,以查看哪個會話存在於哪個用戶。 - 我創建了一個cookie,我將會話ID存儲在其中。 - 當用戶通過訪問注銷功能注銷時會刪除會話。 - 會話在定義的到期時間內自動刪除(例如7天)

身份驗證: - 檢查客戶端是否有包含會話ID的cookie。 如果cookie會話ID與會話表中的會話ID匹配,則對用戶進行身份驗證。

你們有什么感想? 我還需要做些別的事情嗎?

編輯:添加了生成密碼的方法:

public function generate_salt($password) {
    $cost = $this->CONFIG['user__password_encrypt_cost'];
    $salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.');

    // Prefix information about the hash so PHP knows how to verify it later.
    // "$2a$" Means we're using the Blowfish algorithm. The following two digits are the cost parameter.
    $salt = sprintf("$2a$%02d$", $cost) . $salt;

    // Hash the password with the salt
    $hash = crypt($password, $salt);


    return array(
        'salted_password' => $hash,
        'salt' => $salt
     );
}

使用CRYPT_SHA512加密並且鹽是安全的,但建議使用password_hash()。

不應使用帶有MD5或類似弱哈希的密碼。

會話處理過於復雜。

PHP具有會話處理功能,您可以在其中存儲cookie(它實際上自動存儲)。 在會話中,您可以添加用戶ID

$_SESSION['userid'] = $sUserIdFromDB;

如果客戶端有cookie,它將找到會話數據,您可以檢查他是否已登錄。

if (isset($_SESSION['userid']) 
    AND is_int($_SESSION['userid']) AND (0 < $_SESSION['userid'])) {
    $oUserRow = $oDB->getByID($_SESSION['userid']);
} else {
   // user is not logged in (has no valid session)
}

可以在DB中存儲會話ID,但是向DB添加另一個不需要的額外請求。 它不會增加安全性。 實際上,您會發現用戶使用數據庫方法同時從兩個不同的瀏覽器(移動和桌面,移動API)登錄的問題,因為會話ID將不同。

更重要的是: - 每個用戶都應該有不同的鹽 - 強制執行最小密碼長度(8個字符串) - 強制使用大量字符(小寫,大寫,數字,特殊字符) - 允許安全重置新密碼(不需要密碼通過電子郵件發送) - ....

“足夠安全”有點難以回答,但還有一些其他需要考慮的事項:

  1. 鹽強度 - 是用戶名還是隨機值或時間戳? 更喜歡后兩者。
  2. 通過線路發送密碼時是否需要SSL? 考慮這樣做。
  3. cookie'Secure'和'HttpOnly'是否可以緩解CSRF? 如果可以,請執行此操作(取決於客戶支持)。
  4. 員工是否被限制訪問鹽和加密值? 限制誰有權訪問任何敏感信息。
  5. 哪種加密算法和多少位? 嘗試DES 512或更強。
  6. 您是否強制執行密碼強度要求? 你應該!
  7. 數據庫連接安全嗎? 特別重要的是,如果數據庫鏈接在WAN上。

暫無
暫無

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

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