gpt4 book ai didi

PHP __PHP_Incomplete_Class 对象和我的 $_SESSION 数据

转载 作者:IT王子 更新时间:2023-10-29 00:57:36 25 4
gpt4 key购买 nike

我有一个网站设置,在页面加载时,将所有用户提交的字符串转换为 SafeString 对象。对于那些不熟悉 SafeString 的人,它基本上会强制用户回显经过清理的数据,以防止 XSS 和诸如此类的东西。

无论如何,有一个问题。我的 $_SESSION 数组正在填充 __PHP_Incomplete_Class Object。据我所知,这是由于没有在 session 之前初始化类,然后在 session 中存储类对象。

这是我的代码:

require_once __WEBROOT__ . '/includes/safestring.class.php'; 

$temp = array
(
&$_SERVER, &$_GET, &$_POST, &$_COOKIE,
&$_SESSION, &$_ENV, &$_REQUEST, &$_FILES,
&$HTTP_SERVER_VARS, &$HTTP_GET_VARS,
&$HTTP_POST_VARS, &$HTTP_COOKIE_VARS,
&$HTTP_POST_FILES, &$HTTP_ENV_VARS
);

function StringsToSafeString(&$array)
{
foreach ($array as $key => $value)
{
if (is_string($array[$key]))
{
$array[$key] = new SafeString($value);
}

if (is_array($array[$key]))
{
StringsToSafeString($array[$key]);
}
}
}

StringsToSafeString($temp);

unset($temp);

我想不出重写这个来解决问题的方法:/

有什么想法吗?

最佳答案

当您访问 $_SESSION 时,您不仅仅是在更改当前脚本的从 session 中读取的数据副本,您还在将 SafeString 对象写回事件 session 。

但是将自定义对象放在 session 中是不可靠的,我通常会尽量避免这种情况。为了能够做到这一点,您必须在调用 session_start 之前定义相关类;如果不这样做,PHP 的 session 处理程序将不知道如何反序列化该类的实例,并且您最终会得到 __PHP_Incomplete_Class 对象

因此请避免扰乱 session 。如果您必须采用这种方法,请将数据从 $_SESSION 复制到本地 $mysession 数组中。但是,我不得不说,我认为 SafeString 的整个想法是危险且不可行的;我认为这种方法永远不会万无一失。原始文本字符串是否“安全”与它的来源无关,它取决于您如何针对目标上下文对其进行编码。

如果您从数据库或文件等不同来源获得另一个文本字符串,或者在脚本本身内计算,它需要与来自用户的字符串完全相同的处理:它需要是 htmlspecialchars编辑。无论如何,您将不得不编写该转义符; safestring 对你没有任何好处。如果您需要将字符串发送到不同的目标格式,则需要不同的转义。

你不可能把所有的字符串处理问题都封装到一个方便的盒子里,再也不用想它们了;这不是字符串的工作方式。

关于PHP __PHP_Incomplete_Class 对象和我的 $_SESSION 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2010427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com