依赖$_SESSION的站点安全性是安全的


Is safe to rely site security on $_SESSION?

我总是在$_SESSION数组上设置几个变量来控制对我网站的访问,但我想知道这是否是一个安全的解决方案,或者会有比:

更好的东西:
($_SESSION['admin'] == 1) ? take_control_of_my_site : get_back;

会话数据在服务器端维护。你可以信赖的数据,只要

  • 您的服务器是安全的
  • 你仔细验证你放入会话中的任何数据。

会话是安全的。即使是会话变量的名称也是安全的,选择另一个名称也不会增加安全性。

PHP的问题是会话机制。它默认使用文件,这会大大降低您的站点速度,并且伸缩性很差,并且可能不安全,因此suoshin php补丁。

从数据库后端使用会话更安全,可伸缩性好,并保持会话数据的安全(依赖于基于数据库的安全性)。如果黑客有你的数据库,会话是你最不用担心的,因为他们可能也有你所有的密码哈希值。

会话本身不是不安全的。风险是有的,但可以降低。

意识到这些风险是件好事,这样你就可以学会如何避免它们,但你不应该做的一件事就是因为它们而完全避免使用会话。会话是一个完善的工具,如果使用得当,它们是非常安全的。

事实上,要写一个有用的网站而不使用某种会话是相当困难的。如果您不使用内置的,那么您将最终编写您自己的——并且在大多数情况下,真正的安全风险。(我知道有些程序员对会话的安全风险非常着迷,最终实现了远不那么安全的解决方案,仅仅因为他们不想使用会话)。

值得指出的是,PHP的最新版本在安全性方面取得了巨大的进步。老版本的PHP中有许多特性确实对安全性有害;最近的PHP版本已经做出了很大的努力来弃用和删除这些不好的特性。您将注意到会话不在该列表中。他们不需要任何重要的安保工作。这应该告诉你所有你需要知道的。

会话默认以明文形式存储在服务器上。这应该不是问题,除非您的服务器可以被不需要的用户访问。如果是这种情况,那么您的安全性可能已经被破坏了,所以这不是一个真正的问题,但在极少数情况下,您可能会担心,可以让PHP通过session_set_save_handler()函数提供会话加密。