当前位置:  开发笔记 > 编程语言 > 正文

PHP会话变量有多安全?

如何解决《PHP会话变量有多安全?》经验,为你挑选了3个好方法。

我有一个登录脚本,用于根据"用户"表中的数据验证用户名/密码.此外,我有一个'角色'表,指定给定用户的访问级别.假设我使用的是安全登录脚本,那么在成功登录时,是否存在任何安全漏洞,只需在"角色"表中执行其他查询以发现用户的授权级别并将其存储到会话变量中?这个想法就是在具有混合权限的任何页面上,我可以简单地查询会话变量以发现登录用户的授权级别.

谢谢.



1> Anthony..:

会话比cookie更安全.但是仍然可以窃取一个会话,因此黑客可以完全访问该会话中的任何内容.一些避免这种情况的方法是IP检查(它工作得很好,但是非常低,因此它本身不可靠),并且使用随机数.通常使用nonce,您有一个每页"令牌",以便每个页面检查最后一页的nonce是否与它存储的内容相匹配.

在任一安全检查中,都会失去可用性.如果您进行IP检查并且用户位于内部网防火墙(或导致此问题的任何其他情况)后面,该防火墙不能为该用户保留稳定的IP,则每次丢失其IP时都必须重新进行身份验证.使用随机数,您将获得始终有趣的"点击返回将导致此页面中断"的情况.

但是使用cookie,黑客可以通过使用相当简单的XSS技术来窃取会话.如果将用户的会话ID存储为cookie,则它们也容易受到攻击.因此,即使会话只能被可以执行服务器级别的黑客攻击(这需要更复杂的方法和通常一些特权,如果您的服务器是安全的),您仍然需要一些额外的验证级别每个脚本请求.你不应该一起使用cookie和AJAX,因为如果你的cookie被盗,这会让你更容易完全去城里,因为你的ajax请求可能无法对每个请求进行安全检查.例如,如果页面使用nonce,但页面永远不会重新加载,则脚本可能只检查该匹配.如果cookie持有身份验证方法,我现在可以使用被盗的cookie和AJAX漏洞去城镇做我的邪恶.


需要注意的是,PHP将会话ID存储为cookie.
关于nonce的wiki文章非常简单,但有很好的链接:http://en.wikipedia.org/wiki/Cryptographic_nonce基本的想法,据我所知,就像一个令牌,但它只能使用一次(数字)用过一次).每个页面请求检查最后一个nonce并创建一个新的nonce.因此,如果我尝试对你的密码进行蛮力攻击,我会得到一次,因为第2轮的nonce将不匹配.如果我窃取会话和该页面的nonce,我可以继续发出请求并更新nonce直到你发出一个抛出nonce匹配的请求.因为它会看到我的请求和我的随机数,更新...
@Pacerier - 2年后,我和AJAX都走了很长的路.我现在尝试在每个可能的级别实现相同的安全技术,正如您所建议的那样.我当时不知道的一个功能是能够在每个请求上重置会话ID.这不仅可以降低被盗会话ID cookie的风险,而且还可以按请求完成,因此ajax和标准请求可以获得相同的安全性好处(以及潜在的利用).

2> ChiperSoft..:

只有在服务器上执行的脚本才能访问_SESSION数组.如果定义会话cookie的范围,甚至可以将其限制为特定目录.除了你之外,有人可以获得会话数据的唯一方法是将一些PHP代码注入到你的一个页面中.

对于您正在使用的系统,这是可以接受的并且是保存数据库调用的好方法,但请记住,它将要求用户注销并再次登录以应用任何授权更改.因此,如果您想要锁定帐户并且该用户已经登录,则您不能.



3> Brendan Berg..:

应该注意的是,在Apache中,可以跨虚拟主机访问PHP $ _SESSION超全局.考虑这种情况:

您的服务器托管两个域,example.com和instance.org.PHP会话存储在仅限于域的cookie中.

用户登录example.com并接收会话ID.Example.com设置了一些会话变量(存储在服务器上,而不是存储在cookie中).

第三方在传输过程中拦截cookie并将其传递给instance.org.Instance.org现在可以访问example.com会话变量.

当您控制服务器上的所有虚拟主机时,这不是什么大问题,但如果您在共享计算机上,则会出现问题.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有