当一个低权限的非管理员用户登录到我的web应用成功,我存储在以下数据$_SESSION
数组:
$_SESSION = array(
'user_id' => 2343, // whatever their user_id number is from the DB
'allow_admin' => false, // don't give them access to admin tools
'allow_edit' => false, // don't let them edit stuff
);
有没有什么办法,他们可以操控$_SESSION
数组给他们管理员或编辑权限,除了莫名其妙编辑在会议文件中/tmp
? (上面的代码是其中那些项目被添加到的唯一地方$_SESSION
)
这次会议的内容,才能显示和修改在服务器端。
他们只能在“未经授权”的方式,如果您的应用程序或服务器包含一些漏洞进行修改。
你也应该知道这样的事情作为会话固定攻击 ,在攻击者强制特定的会话ID到毫无戒心的用户,在登录并提升该会话的权限谁,允许攻击者共享会话。
一种方法来减轻这些是重新生成会话ID只要更改会议的权限级别。
也看到这个问题:
如果你想避免的JavaScript读你的cookies和中间人攻击,你需要使用以https服务器,并设置会话cookie只需要运输至HTTPS。
session.cookie_secure指定是否饼干应只通过安全连接来发送。 默认为关闭。 此设定是PHP 4.0.4添加的。 另请参见session_get_cookie_params()和session_set_cookie_params()。
session.cookie_httponly标记仅通过HTTP协议可访问该cookie。 这意味着,该cookie不会通过脚本语言,如JavaScript访问。 此设置可以有效地帮助减少通过XSS攻击身份盗窃(尽管不是所有的浏览器支持)。
为了确保管理权限的人离开他的计算机无人看守的几分钟更好,就应该有最后的(管理员)登录计时器。 如果那个时候更多的则是X timeunits了,用户必须重新登录使用管理员权限。
缩短会期也更安全,然后较长的。
服务器
会话存储在服务器上。 用户可以改变会话数据,如果他们有到会话存储的目录直接访问。 解决的办法是,以确保该目录。 并确保你没有在你的PHP代码一个洞,你让USER_ID要由$ _POST或$ _GET进行设置。
客户
但在客户端操作几届可能 劫持某人SESSION_ID。 这将让劫持者冒充该用户。 而且,为了他们发送请求。
也有跨站请求伪造 。 这是当一个黑客诱骗用户发送的请求他 。 通过使他点击一个链接,例如上。 你可以使用令牌解决这个问题。 令牌是把$ _SESSION数组中,并在每一个HTML形式的隐藏字段生成的字符串。 当用户提交一个表单中的值相对于彼此检查。 而每一次的用户请求新页面令牌变化。 这样,攻击者必须尝试预测令牌,这是相当困难的取决于你如何做的标记。
该链接也将展现在这些攻击的例子。
如果你不提供你的脚本,访问没有太多的用户可以做的。 所以,你的会话数据应该是相当安全的。 用户可以做的唯一一件事就是处理会话cookie或URL传递会话ID,但它是不可能的,他会发现其他用户的现有会话ID。
除非你已经留下了安全漏洞的地方(如允许用户添加/更改$ _SESSION数据不知)。
据我所知,没有,除非用户猜测你的会话ID,并在他的饼干替换它。 您应该添加额外的IP-至少检查服务器端,以防止这一点。