我一直在這裏現在潛伏几個月,不得不說這個社會石頭!MySQL和PHP登錄安全涉及
所以,這是我的問題。我正在爲網站創建登錄功能。這只是一個非常基礎的論壇,我的目標是學習每一部分,並從那裏發展,而不是深入到最底層。
我的代碼如下:
<?php
$username = "temp_name";
$password = "temp_pass";
$hostname = "temp_host";
$db_name = "temp_dbase";
$tbl_name = "temp_tbl";
$login_uname = $_POST['username'];
$login_upass = $_POST['password'];
$salt1 = "temp_salt1";
$salt2 = "temp_salt2";
mysql_connect("$hostname", "$username", "$password")or die("Unable to connect to server);
mysql_select_db("$db_name")or die("Cannot access database.");
$user = mysql_query("SELECT username, password FROM $tbl_name WHERE username = '$login_uname');
$userexist = mysql_num_rows($user);
if($userexists == 0) {
die("Invalid login information.");
}
$userinfo = mysql_fetch_array($user);
$checkpass = md5($login_upass);
$checkpass = $salt1 . $checkpass . $salt2;
if(($userinfo['username'] == $login_uname) && ($userinfo['password'] == $checkpass)) {
setcookie('username', "$login_uname", time()+60*60*24*7);
setcookie('password', "$login_upass", time()+60*60*24*7);
}
else
die("Invalid login information.");
?>
現在,代碼工作,沒有問題。我理解散列和醃製密碼的基礎知識(我知道md5並不理想,但現在它只是一個學習工具。)我真正關心的是:
我的代碼中有我的MySQL登錄信息!我考慮只是有用戶註冊一個用戶名和密碼,居然讓MySQL來生成一個登錄用戶名和密碼,以自身爲他們授予相應的權限,但我覺得這是完全不切實際的,安全風險本身就是作爲網站擴大。
隱藏代碼在另一個文件中,只是使用可能會奏效,但使用這種方法阻止用戶能夠瀏覽我的代碼本身,只是看基本MySQL的登錄信息不?
我知道PHP代碼沒有在網站的源代碼顯示,除非它是不正確解析。但是我應該注意哪些問題或解決方案?再次
感謝您的幫助!我知道這是一段文字。
這個問題更適合對於http://codereview.stackexchange.com/,因爲您基本上正在尋找關於當前工作代碼的評論。 –
首先,您應該遠離mysql_ *函數,因爲它們已被棄用。嘗試PDO類或mysqli_ *函數 – 6elephants
我同意@MikeBrant。您正在尋找代碼審查。你的代碼有很多明顯的問題。首先,你不要散列pw,然後把它作爲一個字符串添加到它。您將鹽添加到基礎pw中,然後對其進行哈希處理。您應該爲每個用戶存儲一個獨特的鹽,並將其存儲在用戶行中。我也不知道你爲什麼使用名稱/ pw設置cookie。可怕的想法。使用會話進行狀態。即使您想要記住我的功能,您也應該爲其生成一個密鑰並將其存儲在用戶行中。 – gview