我总是在 $_SESSION 数组上设置几个变量来控制对我网站的访问,但我想知道这是否是一个安全的解决方案,或者会有比以下更好的解决方案:
($_SESSION['admin'] == 1) ? take_control_of_my_site : get_back;
我总是在 $_SESSION 数组上设置几个变量来控制对我网站的访问,但我想知道这是否是一个安全的解决方案,或者会有比以下更好的解决方案:
($_SESSION['admin'] == 1) ? take_control_of_my_site : get_back;
会话数据在服务器端维护。您可以依赖数据,只要
会话是安全的。即使会话变量的名称是安全的,选择另一个名称也不会增加安全性。
PHP 中的问题是会话机制。它默认使用文件,这会大大降低您的网站速度并且扩展性非常差,并且可能不安全,因此 suoshin php 补丁。
使用来自数据库后端的会话更加安全,可扩展性好,并保证您的会话数据安全(依赖于基于数据库的安全性)。如果黑客拥有您的数据库,那么您最不必担心会话,因为它们可能也拥有您所有的密码哈希值。
会话本身并不是不安全的。有风险,但可以减轻。
意识到风险是件好事,这样您就可以学习如何避免它们,但您不应该做的一件事是因为它们而完全避免使用会话。会话是一种成熟的工具,如果使用得当,它们是完全安全的。
事实上,编写一个不使用某种会话的有用网站是相当困难的。如果您不使用内置的,那么您最终会编写自己的 - 在大多数情况下,这确实是一种安全风险。(我知道有些程序员已经痴迷于会话的安全风险,并且仅仅因为他们不想使用会话而最终实现了安全性低得多的解决方案)。
值得指出的是,最近的 PHP 版本在安全性方面取得了巨大进步。旧 PHP 版本中的许多特性确实不利于安全性;最新版本的 PHP 已经做出了巨大的努力来弃用和删除这些不良功能。您会注意到会话不在该列表中。他们不需要任何重要的安全工作。这应该告诉你所有你需要知道的。
默认情况下,会话以纯文本形式存储在服务器上。这应该不是问题,除非不需要的用户可以访问您的服务器。如果是这种情况,那么您的安全性可能已经受到攻击,因此这并不是真正的问题,但在您可能担心的极少数情况下,可以通过该session_set_save_handler()
函数让 PHP 提供会话加密。