gpt4 book ai didi

PHP session 劫持及其方法

转载 作者:可可西里 更新时间:2023-11-01 13:14:44 25 4
gpt4 key购买 nike

我试图构建自己的安全 PHP session 类,但实际上我想知道是什么阻止了某人模拟 session ?

IE,为什么不在 test.php 上添加代码

$_SESSION['logged_in'] = true;

无法在 index.php 上工作

if($_SESSION['logged_in'] == True){
echo 'logged in';
}

我知道解决此问题的方法是通过将 session 锁定到 IP 地址和用户代理来生成安全 ID 来保护 session ,但这究竟是如何工作的?

意思是,如果我能够猜出 session ID,我是否能够设置 $_SESSION['logged_in'] = true 并模拟登录?然后我应该更改 SESSION 变量以检查登录到更安全的变量吗?

很抱歉我的问题,希望我能说得通......

最佳答案

首先, session 数据仅存储在服务器上,因此外部客户端不能简单地创建自己的 session 数据并将其发送到您的服务器。

因此归结为实际猜测其他人的 session 标识符并假设他们的身份;这是相当困难的,但并非不可能。在攻击者可以窃听受害者与您的服务器之间的网络流量的情况下,根本不可能阻止他们。

不过,您可以采取一些措施来使事情变得更安全:

  1. 使用 SSL;另见 session.cookie_secure .
  2. 从良好的随机源生成标识符,即 Linux 机器上的 /dev/urandom;另见 session.entropy_file .
  3. 在用户登录或注销时重新生成标识符;另见 session_regenerate_id()
  4. 使用 HttpOnly cookie(且仅使用 cookie)来永久保存 session 标识符;另见 session.use_only_cookiessession.cookie_httponly .
  5. 使用严格的 session ;另见 session.use_strict_mode .
  6. 在 session 中保留用户代理的计算哈希值并确保它不会更改,例如:

    $_SESSION['_agent'] = sha1($_SERVER['HTTP_USER_AGENT']);
  7. 尽量缩短 session 的生命周期并使用高级 "remember me" feature在 session 过期时重新生成 session 。

了解潜在的劫持何时发生并在发生时采取适当的行动也很重要。您将需要跟踪哪些 session 属于哪个用户,以便在其中一个被破坏时可以使所有 session 无效。

顺便说一句,将 session 锁定到一个 IP 地址很棘手;某些 ISP 会使一个用户看起来像是来自不同的地址,或者多个用户来自同一地址。无论哪种方式,最好跟踪用户代理,因为它不太可能发生变化。

关于PHP session 劫持及其方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19153896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com