繁体   English   中英

如何让$ _SESSION更安全?

[英]How can I make $_SESSIONs more secure?

似乎最受欢迎的思想是随机生成会话ID,在用户登录时重新生成会话ID,并在他们登录时定期为现有用户重新生成会话ID,这只是为了提高安全性。

我正在使用替代解决方案,但我不是一个经验丰富的PHP专家,我担心有一个明显的安全漏洞(或两个......或更多)我可能会丢失。

如果您可以查看以下内容并告诉我它可能会受到什么影响,我会很感激。

该脚本创建一个与用户计算机绑定的会话ID,并始终保持不变。 我想在哈希中包含当前日期,但是我们的夜班工作人员会在午夜退出。 不是说我会到处听他们的抱怨;)

我确实意识到,如果两个使用相同操作系统和浏览器的用户使用免费WiFi坐在咖啡店,使用IP地址会被滥用,但这是针对内部MIS的,因此每个用户都有自己的静态IP地址。 如果他们后来决定让它从网上访问我就麻烦了! 但这不是规范的一部分:)

// Set the session ID
$session_hash = md5( $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_HOST'] . $_SERVER['REMOTE_ADDR'] );
// Compare against session ID received from user
if ( session_id() != $session_hash )
{
    session_destroy();
    unset ( $_SESSION );
    session_id( $session_hash );
    session_start();
}
else
{
    // Attempt to load user details from database if $_SESSION['user_ID'] is set.
}

欢迎并赞赏所有建设性意见!

我不打算尝试创建自己的会话ID。 您的方法特别弱,因为在代理服务器的情况下,许多人将共享相同的远程主机,用户代理和远程地址。

除非您找到避免它们的特定原因,否则请使用PHP的内置会话。 你没有表明你有这样的理由。 恰恰相反,正如您所说的那样,系统是供内部使用的,其中您的家庭滚动“增强”会话安全性更不重要。

你正在做什么并不重要,你很可能只会通过尝试自己来减少PHP已经为你提供的安全性。

如果它们都有自己的静态IP,则将IP存储在会话中,并在每次加载页面时进行比较。 如果$_SERVER['REMOTE_ADDR'] != $_SESSION['IP'] ,有人试图窃取会话。

并且不要忘记session_regenerate_id()

内置机制应该适合您的需求。 如果您坚持推出自己的解决方案,我建议您将随机数据添加到最后。 生成此类随机数据的最佳方法是PHP的openssl_random_pseudo_bytes()函数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM