我目前正在测试一个简单的登录系统。脚本所做的是检查我输入的用户名和密码以及我的数据库中输入的用户名和密码,如果它们都匹配,则会将用户名设置为会话变量。当我转到“仅限会员”页面时,它将检查会话变量是否存在,如果不存在,则用户无法查看内容。它似乎按预期工作。基于以上信息,这里是我的问题:我可以用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攻击 –