我的软件中出现了这种情况,这可能会给我带来很多麻烦。我会尽力解释一下。
实际上我有3个环境,所有3个环境使用相同的寄存器,登录和恢复系统。但是它们中的每一个都是正确分开的,假设结构是:上面的结构在类中包含Register,Log In和Recovery方法,但代码是相同的。我知道它会一起制作并创建一些识别码来分隔它们,但软件并没有计划像这样增长,现在我们遇到了一种情况。 ;(
当我登录管理员帐户时,我首先遇到了问题,并尝试在没有任何会话的情况下访问商店/环境(帐户)(但当然使用的会话是管理员帐户)。我获得了访问权限,如果一个供应商知道该问题或商店的客户知道这一点,则不安全。
我该怎么做才能防止这类问题?重写代码?或者是否有一些解决方法可以写入我的会话代码?
谢谢!
答案 0 :(得分:2)
您可以使用session_name()
来定义用于存储会话ID的Cookie名称,这样您就可以命名并分隔同一主机下的不同环境。在致电session_start()
之前使用它。
例如,管理员区域中的每个session_start()
来电都应该在:
session_name("ADMINSESSID");
session_start();
您对商店和供应商做了类似的事情。
虽然它可以分隔$_SESSION
个环境,但我并不完全确定它的安全性方面(例如编辑Cookie以使用供应商会话ID作为管理员会话ID)。也许您还应该在每个$_SESSION
标记它所属的环境。
登录时间:
// if user authenticated successfully to that environemnt
$_SESSION['environment'] = session_name();
同一网站区域的其他任何地方:
if ($_SESSION['environment'] != session_name())
die('Access violation.');