使用Session类避免循环依赖性

时间:2015-06-25 16:11:54

标签: php oop

问题在于两个类,即SessionEncryption

为了更多地保护会话数据,我扩展了内置SessionHandler并在写入时加密了序列化会话数据。

为了提高网站其他各个区域的安全性,一些数据会被加密。系统将Encryption类'初始化向量存储在$_SESSION类中的Session变量中。

这是循环依赖的一个非常明显的例子。我提出的避免这种情况的选项涉及绕过一个或另一个类并直接使用内置工具。

但这会产生其他问题!目前我正在使用RIJNDAEL_256进行所有加密,如果这需要更新,则代码将有2个需要更改的位置(可能更多到最后)。

在维持当前功能的同时,如何避免这种情况?

2 个答案:

答案 0 :(得分:0)

加密初始化向量没有意义,因为它不是密钥,不需要保密。这将删除您的循环依赖项。 [1] [2]

至于指定当前的加密算法,我不确定你在哪里有两面性。理想情况下,您应该在方法或项目配置中有一个位置,您可以在其中指定当前使用的算法,并让感兴趣的各方使用此公共值。

答案 1 :(得分:0)

解决方案最终变得相当简单。首先,我将Encryption类'$iv更改为静态。由于事实证明使用SessionHandler::write()建议write() ECB只有部分会话数据($iv是全部或全部),因此会话数据本身现在使用{加密} {1}}模式(所有其他加密使用涉及iv的模式)。

在会话开始时,iv将从之前的会话数据中提取(或者在不存在/已过期时创建)并应用于Encryption类中的静态Encryption属性。因此,Session不再依赖$ivhello1<- function(pillow){ if (missing(pillow)){ stop("You need to enter pillow") } pillow } 属性可用于所有实例!