2
我有一個網站,其中某些區域/功能僅適用於已通過身份驗證的用戶。一些用戶在網站之前就已經存在,並且目前擁有有效的訂閱。因此,他們的信息(必然)存在於數據庫中,但是這些賬戶不應該被任何人(甚至是他們所屬的用戶)訪問 - 直到他們驗證了他們的信息,通過帶有散列參數的電子郵件接收鏈接並設置他們的密碼。在MySQL數據庫中存儲不可訪問的用戶
因此:我想將這些用戶存儲在Users
表中,但我不希望他們能夠登錄到該網站。
目前,我的數據庫建立這樣的:
Table: Users
email | password | salt
------------+------------------+----------------
User1 | | // password and salt are
User2 | | // empty strings, not NULL
User3 | md5(pass + salt) | rand(10-digits)
User4 | md5(pass + salt) | rand(10-digits)
Table: Non-Registered Users
email | identify1 | identify2
------------+------------------+----------------
User1 | secret1a | secret1b
User2 | secret2a | secret2b
而且我accessControl.php,與簡潔一些僞代碼:
<?php
session_start();
if(isset($_POST['email']) && isset($_POST['password']) {
$sql1 = "SELECT salt FROM Users WHERE email = :email";
.... // prepare and execute
if (!empty($result1)) {
$hash = sha2($password.$result1['salt'],256);
$sql2 = "SELECT * FROM Users WHERE password = :hash AND email = :email";
.... // prepare and execute
if(!empty($result2)) {
$_SESSION['email'] = $_POST['email'];
$_SESSION['password'] = $_POST['password'];
}
}
} elseif(isset($_SESSION['email'] && isset($_SESSION['password'])) {
// do pretty much the same check as above
} else {
// force login
}
?>
所以,我的問題是:是否有可能未註冊的用戶先登錄而不先設置密碼?這是不可能的空白字段匹配什麼 SHA256,是嗎?我擔心我忽略了一些明顯的東西。
請謝謝! :3
感謝您的確認。我很欣賞你提到的SQL注入 - 但是由於這部分代碼與手頭的問題無關,所以我認爲最好不要爲了簡潔而忽略它。 – kittykittybangbang