0

我在我的软件中遇到了一个情况,这会给我带来很多麻烦。我会尽力解释。

我实际上有 3 个环境,所有 3 个环境都使用相同的寄存器、登录和恢复系统。但是它们中的每一个都被适当地分开了,假设结构是:

  • 行政/
  • 店铺/
  • 供应商/

上面的结构包含一个类中的Register、Log In和Recovery方法,但代码是相同的。我知道它会一起制作并创建一些识别码来区分它们,但软件并没有计划像这样发展,现在我们遇到了一个情况。;(

例如,当我登录到管理员帐户时,我首先遇到了问题,并尝试在没有任何会话的情况下访问商店/环境(帐户)(但当然使用的会话是管理员帐户)。我获得了访问权限,如果一个供应商知道问题或商店的客户知道这一点,这是不安全的。

我应该怎么做才能防止此类问题?重新编写代码?还是有一些解决方法可以写入我的会话代码?

谢谢!

4

1 回答 1

2

您可以使用session_name()来定义使用哪个cookie名称来存储会话ID,这样您就可以命名和分隔同一主机下的不同环境。在调用之前使用它session_start()

例如,session_start()管理区域中的每个呼叫都应以:

session_name("ADMINSESSID");
session_start();

你对 Store 和 Supplier 做类似的事情。

尽管它适用于单独的$_SESSION环境,但我并不完全确定它的安全性(例如编辑 Cookie 以使用供应商会话 ID 作为管理会话 ID)。也许您还应该在每个环境中标记$_SESSION它属于哪个环境。

登录时:

// if user authenticated successfully to that environemnt
$_SESSION['environment'] = session_name();

同一站点区域中的其他任何地方:

if ($_SESSION['environment'] != session_name())
    die('Access violation.');
于 2013-06-28T23:41:20.377 回答