我目前正在測試一個簡單的登錄系統。腳本所做的是檢查我輸入的用戶名和密碼以及我的數據庫中輸入的用戶名和密碼,如果它們都匹配,則會將用戶名設置爲會話變量。當我轉到「僅限會員」頁面時,它將檢查會話變量是否存在,如果不存在,則用戶無法查看內容。它似乎按預期工作。基於以上信息,這裏是我的問題:我可以用cookie改進我的PHP登錄系統嗎?
我的方法有哪些漏洞/缺陷?
餅乾可以使它更安全嗎?如果是這樣,它將如何與我的代碼相關?
這裏就是我有這麼遠的工作:
的用戶名和密碼檢查:
<?
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
if ($username && $password){
$query = mysql_query("SELECT * FROM user WHERE username='$username' ");
$numrows = mysql_num_rows($query);
//if user exists
if ($numrows !=0){
while ($row = mysql_fetch_array($query)){
$dbusername = $row['username'];
$dbpassword = $row['password'];
}
if ($username == $dbusername && md5($password) == $dbpassword){
echo 'You\'re in! <a href="member.php">Click</a> here to enter the member page.';
$_SESSION['username'] = $dbusername;
}
else
echo "incorrect password!";
}
else
die("sorry, that user doesn't exist!");
}
?>
成員只有網頁:
<?
session_start();
if ($_SESSION['username']){
echo "Welcome, ".$_SESSION['username']."!<br>
<a href='changepassword.php'>Change password</a>
";
}
else{
echo "please log in";
}
?>
1)巨大的脆弱性:SQL注入! 2)md5有更好的選擇(比如sha1()或者甚至更好,bcrypt)3)Cookies不會使任何事情更安全(如果有的話,相反); 4)也要注意XSS攻擊 –