Pages, Articles & News
Tools & Plugins
Example / Placeholder Title


Description as an example placeholder. Sample text content for further customization of the "Index36" template.

You are free to edit and customize the template however you like. If you don’t have time or enough knowledge — you can always order template adaptation by contacting me via GitHub or private messages on the digital goods marketplace.

2025-08-29 18:35

Ошибка Warning: unserialize(): Extra data starting at offset 146 of 147 bytes указывает на то, что данные, которые пытаются десериализовать в файле CommentsWidget.php, повреждены или имеют неправильный формат, из-за чего функция PHP unserialize() завершается с ошибкой. Скорее всего, это связано с некорректными или подделанными данными в параметре GET ci, который декодируется из base64 и затем десериализуется. Чтобы исправить это, нужно добавить проверку данных и обработку ошибок, чтобы убедиться, что данные безопасны и правильно отформатированы перед попыткой десериализации.

Вот исправленный код с добавленной проверкой, обработкой ошибок

		// Get the URL parameters of the current page where the comment widget is displayed.
		if (COT_AJAX && Cot::$env['ext'] === 'comments' && isset($_GET['ci'])) {
			$ci = cot_import('ci', 'G', 'TXT'); // Берём параметр ci из GET
			if (!empty($ci)) {
				$decoded = base64_decode($ci, true); // Декодируем base64 (true = строгая проверка)
				if ($decoded !== false) {
					// trim убирает возможные пробелы/переносы, @ подавляет warning при ошибке
					$unserialized = @unserialize(trim($decoded));
					if ($unserialized !== false && is_array($unserialized)) {
						$this->currentUrlExtension = $unserialized[0]; // Расширение
						$this->currentUrlParams    = $unserialized[1]; // Параметры
					}
				}
			}
		} elseif (
			Cot::$env['ext'] !== 'comments'
			|| !isset($_GET['a'])
			|| $_GET['a'] !== 'display'
		) {
			$this->currentUrlExtension = Cot::$env['ext']; // Текущее расширение
			$this->currentUrlParams = $_GET;               // Все GET-параметры
			unset($this->currentUrlParams['e']);           // Убираем служебный параметр
			if (isset($_GET['rwr'])) {
				unset($this->currentUrlParams['rwr']);     // Убираем rwr если есть
			}
		}

 

или так

// Получаем параметры URL текущей страницы, где отображается виджет комментариев.
if (COT_AJAX && Cot::$env['ext'] === 'comments' && isset($_GET['ci'])) {
    $ci = cot_import('ci', 'G', 'TXT');
    if (!empty($ci)) {
        // Декодируем base64-строку с проверкой валидности
        $decoded = base64_decode($ci, true); // Строгий режим для base64
        if ($decoded !== false) {
            // Безопасно десериализуем данные, отключая поддержку классов
            $unserialized = @unserialize($decoded, ['allowed_classes' => false]);
            if ($unserialized !== false || $decoded === serialize(false)) {
                // Присваиваем значения, если десериализация успешна
                $this->currentUrlExtension = $unserialized[0] ?? '';
                $this->currentUrlParams = $unserialized[1] ?? [];
            }
        }
    }
} elseif (
    Cot::$env['ext'] !== 'comments'
    || !isset($_GET['a'])
    || $_GET['a'] !== 'display'
) {
    // Если не AJAX или не страница комментариев, используем текущие параметры
    $this->currentUrlExtension = Cot::$env['ext'];
    $this->currentUrlParams = $_GET;
    unset($this->currentUrlParams['e']);
    if (isset($_GET['rwr'])) {
        unset($this->currentUrlParams['rwr']);
    }
}

 

Пояснения:

Проверка base64: Используется base64_decode($ci, true) для строгой проверки валидности base64-строки.
Безопасная десериализация: Применяется @unserialize с опцией ['allowed_classes' => false] для защиты от уязвимостей и подавления предупреждений.
Проверка результата: Проверяется успешность десериализации или соответствие данным serialize(false).
Безопасное присваивание: Оператор ?? задаёт значения по умолчанию, если данные отсутствуют.

 

 

Account