PHP最佳实践,以防止身份验证中的会话劫持

时间:2012-11-08 05:53:20

标签: php session authentication session-hijacking

  

可能重复:
  Preventing session hijacking

我正在编写PHP网络应用程序的登录和身份验证系统,并寻找防止会话劫持的最佳做法。登录页面集的会话:

$_SESSION['email_address'] = $_POST['email_address'];
$_SESSION['ip_address'] = $_SERVER['REMOTE_ADDR'];

然后在每个页面和操作中我检查以确保会话存在,并且会话中存储的IP地址与$ _SERVER ['REMOTE_ADDR']中的IP地址匹配。

if(isset($_SESSION['email_address']) && isset($_SESSION['ip_address']) && $_SESSION['ip_address'] == $_SERVER['REMOTE_ADDR']) {
     //valid auth
}

在线阅读,有人说只是检查IP地址不够好。还需要什么?此外,还有关于使用session_regenerate_id()的讨论。这是如何影响我的代码的?我是否在每个页面上拨打session_regenerate_id()

感谢。

1 个答案:

答案 0 :(得分:0)

如果您正在编写自己的登录系统,我希望您对所有安全问题都非常精通,并且不要依赖本网站上的人提供给您的问题。 $ _SESSION在任何共享服务器上自动存在安全风险。 $ _SESSION可用于系统上运行的所有php进程。如果您的任何客户最终在共享服务器上运行您的软件,您将不得不为此做好计划。

它也极易编码错误,从而产生安全漏洞。你最好使用Yii或一些已经提供强大的身份验证措施的框架。例如,Yii,如果您希望能够将其归结为只是为您提供一些登录和安全插件,那么就像您可以获得的那样基本。