我的网站使用cookie登录和注销,它似乎工作正常,但我确信有一些我不知道的安全问题。我希望任何可以使这更安全的评论或见解。
登录:
if(isset($_REQUEST['email']) && isset($_REQUEST['password'])) {
if ($result = $usersqli->query("SELECT * FROM users WHERE email='".$usersqli->real_escape_string($_POST['email'])."' AND password='".$usersqli->real_escape_string($_POST['password'])."'")) {
if ($result->num_rows==1){
$row = $result->fetch_object();
$_SESSION["uid"]=$row->id;
setcookie('email', $usersqli->real_escape_string($_REQUEST['email']), time()+60*60*24*365,'/');
setcookie('password', md5($_REQUEST['password']), time()+60*60*24*365,'/');
$usersqli->query("UPDATE users SET last_login=NOW() WHERE email='".$usersqli->real_escape_string($_POST['email'])."' AND password='".$usersqli->real_escape_string($_POST['password'])."'");
header( 'Location: index.php' ) ;
}else{
header( 'Location: index.php?show=login&err=Invalid login credentials' ) ;
}
}
}
退出:
setcookie('email','', time() - 60000);
setcookie('password', '', time() - 60000);
session_destroy();
header("Location: index.php");
每页的标题:
if(!$_SESSION[uid] && $_REQUEST[show]!='logout'){
if (isset($_COOKIE['email']) && isset($_COOKIE['password'])) {
if ($result = $usersqli->query("SELECT * FROM users WHERE email='".$usersqli->real_escape_string($_COOKIE['email'])."'")) {
if ($result->num_rows==1){
$row = $result->fetch_object();
if(md5($usersqli->real_escape_string($row->password))==$_COOKIE['password']){
$_SESSION["uid"]=$row->id;
}
}
}
}
}
答案 0 :(得分:0)
不要将密码存储在cookie中 - 主要安全禁止。 关于如何执行此操作有lots of articles。
答案 1 :(得分:0)
这两种身份验证机制都存在会话固定问题。
我没有看到明确的session_start()。
为什么要分开2个饼干?
虽然密码的md5哈希值意味着某人无法嗅探原始密码,但没有什么可以阻止他们嗅探密码的哈希值,这也可以让他们访问密码。通过SSL运行它不会有帮助 - 但在cookie上设置安全和仅http标志将解决后一个问题。