第一次爲網頁創建一個登錄系統,我一直在努力讀懂安全性,但不確定我是否正確地做了。我的登錄會話是否安全?
到目前爲止,我有一個用戶名/密碼存儲和密碼哈希與SHA256和3字符鹽。如果用戶名和密碼都正確,那麼我提出一個新的會話ID這樣
session_regenerate_id();
$_SESSION['valid'] = 1;
$_SESSION['userid'] = $userid;
在每一頁我檢查
function isLoggedIn()
{
if(isset($_SESSION['valid']) && $_SESSION['valid'])
return true;
return false;
}
我用它來檢查是否有正確的用戶
$username = $_POST['username'];
$password = $_POST['password'];
//connect to the database here
connect();
//save username
$username = mysql_real_escape_string($username);
//query the database for the username provided
$query = "SELECT password, salt
FROM users
WHERE username = '$username';";
$result = mysql_query($query);
if(mysql_num_rows($result) < 1) //no such user exists
{
//show incorrect login message
}
//check the password is correct for the username found
$userData = mysql_fetch_array($result, MYSQL_ASSOC);
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password));
if($hash != $userData['password']) //incorrect password
{
//show incorrect login message
}
else
{
//setup a new session
validateUser();
//redirect to the main page
header('Location: main.php');
die();
如果它是假的,那麼它們會被髮送回登錄頁面。這足夠安全嗎?
主頁我也有HTML鏈接
<li><a href="main.php">Home page</a>
,所以我需要結束主頁上的PHP腳本時使用這些鏈接?
如果這是您第一次登錄,就ok了。但是你應該閱讀關於登錄安全性。有很多事情要考慮。 – machineaddict 2012-07-13 09:46:25
3焦炭鹽?如果是16個字符並且每個用戶都有自己的鹽,那將更安全。 – 2012-07-13 09:51:46
這絕對值得一讀:[基於表單的網站驗證權威指南](http://stackoverflow.com/questions/549/the-definitive-guide-to-forms-based-website-authentication) – Polynomial 2012-07-13 15:16:15