1

可能重复:
防止会话劫持

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

$_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()在每一页上调用吗?

谢谢。

4

1 回答 1

0

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

它也非常容易编写造成安全漏洞的错误代码。你最好使用 Yii 或一些已经提供强大身份验证措施的框架。例如,如果您想将其归结为只为您提供一些登录和安全插件来启动,那么 Yii 几乎是您所能获得的基本功能。

于 2012-11-08T06:01:37.890 回答