安全性如何是PHP会话变量?(How safe are PHP session variables?

2019-06-17 15:47发布

我有一个验证对数据的用户名/密码在“用户”表中的登录脚本。 另外,我有一个“角色”表中,指定给定用户的访问级别。 假设我是使用安全的登录脚本,是否有简单的执行额外的查询,成功登录后的任何安全漏洞,对“角色”表来发现用户的授权级别,并存储到一个会话变量呢? 然后这个想法是,随着混合授权任何页面上,我可以简单地查询会话变量来发现登录用户的权限级别。

谢谢。

Answer 1:

会议比,比如说显著更安全,饼干。 但它仍然有可能窃取会话,因此黑客将不得不无论是在那届总访问。 一些方法来避免这种情况的IP检查(工作得很好,但非常低的网络连接,因此不可靠自身),并使用随机数。 通常用随机数,你有每页的“令牌”,使每一页检查了最后一页的现时信息匹配它已经存储了什么。

在这两种安全检查,有实用性的损失。 如果你这样做IP检查和用户是内网防火墙(或导致此任何其他情况),这不成立一个稳定的IP该用户的背后,他们将不得不每次他们失去了他们的IP时重新进行身份验证。 用随机数,你得到的总是充满乐趣“按返回,将导致此页面打破”的局面。

但是,用一个cookie,黑客可以简单地通过使用相当简单的XSS技术盗取了会议。 如果您存储用户的会话ID作为cookie,他们是脆弱的这一点。 因此,即使会议是唯一的穿透的人谁可以做一个服务器级别的黑客(这需要更为完善的方法与通常的一些特权的量,如果你的服务器是安全的),你仍然会需要验证的一些额外的水平在每个脚本的请求。 你不应该使用cookie和AJAX在一起,因为这样做会稍微容易完全去城里,如果该cookie被盗,为您的Ajax请求可能无法得到对每个请求的安全检查。 例如,如果该页面使用随机数,但页面重新加载从来没有,该脚本可以只检查那场比赛。 而如果cookie持有的身份验证方法,我现在就可以去镇利用偷来的饼干和AJAX孔做我的邪恶。



Answer 2:

只有你的服务器上执行的脚本可以访问_SESSION数组。 如果定义会话cookie的范围内,你甚至可以将其限制为一个特定的目录。 只有这样,有人除此之外,您还可以得到该会话的数据是注入一些PHP代码到你的网页之一。

至于你所使用的系统,这是可以接受的,是保存数据库调用,但请记住,它会要求用户注销和任何授权的更改申请再次登录的一个好办法。 所以,如果你想锁定一个帐户,而该用户已登录,则不能。



Answer 3:

应当指出的是,在Apache中的PHP $ _SESSION超全局跨越virtualhosts访问。 考虑以下情形:

  • 你的服务器承载两个域,example.com和instance.org。 PHP会话存储在被限制到域的Cookie。
  • 用户登录到example.com和接收的会话ID。 Example.com设置一些会话变量(这是存储在服务器上,而不是在cookie中)。
  • 第三方传输过程中截取该Cookie,并将它传递给instance.org。 Instance.org现在可以访问example.com会话变量。

这不是什么大不了的,当你控制你的服务器上的所有virtualhosts,但如果你是一个共享的机器上,这是有问题的。



Answer 4:

如果你依赖于存储会话变量内的值来确定角色,那么你就失去了改变的DB值的能力,并把它反映了对用户的当前会话。 如果你看一下Zend框架,有手动只有数据的最低值存储在会话中的身份验证和授权,并措辞强硬的警告,有明显的区别(即“是啊,他是用户#37,他登录”) 。

至于“安全”云 - 除非你共享的主机上,没有什么可担心的。 在一个正确配置的共享主机,他们应该是相对安全的,太。



文章来源: How safe are PHP session variables?
标签: php security