【问题标题】:breaking into SESSION variable闯入 SESSION 变量
【发布时间】:2012-05-07 11:45:35
【问题描述】:

在我项目中的每个 PHP 文件中,我都使用以下代码,这样任何人都无法在不登录的情况下进入网站:

<?php
    session_start();
    if($_SESSION['userid']!="myuserid"){
        header("Location: Adminlogon.php");
    }
?>

请注意,我只需要一个用户名,用户名和密码在一群人之间共享。

这段代码安全吗?我能做得更好吗?

【问题讨论】:

  • 在发送重定向标头后输入exit()
  • 它不是防弹的(很少有),但它足以起到简单的威慑作用。
  • 如果您正在寻找安全性,那么我不确定共享 ID/密码是否是一种好方法,除非您一次只强制执行一次登录(即,如果有人否则,只要会话处于活动状态,就会尝试登录您拒绝它)。如果不是,那么如何阻止人们与其他(未经授权的)用户共享 ID/密码?

标签: php security session


【解决方案1】:

您的代码不安全,因为实际上它并没有阻止每个脚本被执行 - 这是您真正想要阻止的。

如果会话设置不正确,为了防止执行,您需要离开文件,例如使用 return 语句:

<?php
    session_start();
    if ($_SESSION['userid'] != "myuserid")
    {
        header("Location: Adminlogon.php");
        return; ### leave this script/include
    }
?>

除了return,您还可以使用exitdie 语句来编写基本脚本。

【讨论】:

  • 如果您的程序有任何注册的关闭函数或对象析构函数,即使在退出语句之后它们仍然会运行。
  • @DmitriSnytkine:如果你在会话中有一个序列化的有效负载,它也会利用应用程序。
【解决方案2】:

这将是安全的,但是当您使用纯 HTTP 时,cookie 和会话很容易在 LAN 中“劫持”。所以强制你的应用服务器使用 HTTPS

【讨论】:

猜你喜欢
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 2013-05-28
  • 2012-06-11
相关资源
最近更新 更多