1

关于 cookie 和会话的 PHP 安全性,这是我迄今为止为防止攻击所做的工作。我做错了什么/不安全?

登录.php

 if ($username==$dbusername&&$hashed_password==$dbpassword){

setcookie('username[0]',$username,time()+(60*60*24*365));
setcookie('username[1]',$userid,time()+(60*60*24*365));
setcookie('password',$hashed_password,time()+(60*60*24*365));

if($admin=='1') {
setcookie('username[3]',$admin,time()+(60*60*24*365));  
}
$_SESSION['logged-in']=1;

注销.php

    $time = time()-(60*60*24*365);
setcookie('username[0]', '',$time);
setcookie('username[1]', '',$time);
setcookie('username[2]', '',$time);
setcookie('username[3]', '',$time);
setcookie('password', '',$time);
unset($_COOKIE['username']); 
unset($_SESSION['logged-in']);

我在每个页面上调用 session_regenerate_id(),停止会话固定/劫持是否正确?

<?php session_start(); session_regenerate_id();

这是我的 PHP.ini 我还可以通过哪些其他方式为会话和 cookie 提供安全性

    session.use_trans_sid = 0
session.user_only_cookies = 1

欢迎任何示例/改进,因为我通过示例可以更好地学习。

4

2 回答 2

2

在更改访问权限时(例如登录后),通常会重新生成会话 ID。

密码不应存储在客户端的 cookie中,甚至不应该存储在哈希中。甚至不需要将它存储在会话中,您只使用它来验证登录,并且在将状态写入会话后,您应该忘记密码。

如果您想要一个真正安全的站点,您需要一个带有 SSL 加密的HTTPS 连接。否则,攻击者可以窃听发送的明文信息,并使用 session-id(或您用来验证用户的任何内容)来冒充用户。

于 2012-07-01T06:50:16.023 回答
1

请真的请不要将密码存储为cookie。它(计算机)可能在咖啡馆或其他地方。

这是一个安全问题,并且有待破解。

顺便说一句,重新考虑并使用狡猾的头脑来了解一个人如何闯入您的系统。

于 2012-07-01T04:46:34.220 回答