Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Не создавайте несколько учетных записей, вы будете заблокированы! Для получения дополнительной информации о правилах, ограничениях и многом другом посетите страницу «Помощь».
Нашли неработающую ссылку? Используйте кнопку «Жалоба»!
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
РелизSngine - Ultimate PHP Social Network Platform
v4.3 NULLED
Исправлены ошибки хеширования в Sngine 4.2.1 NULLED. Включает обход лицензии.
Примечание: Поддерживается только версия 4.2.1.
Следите за изменениями значений, чтобы использовать код в будущих обновлениях.
Измененные файлы:
bootstrap.php
includes\functions.php
includes\assets\js\core\core.js
Исправление ошибок хеширования сессии - Список изменений Проблема: "Ваш хеш сессии поврежден. Пожалуйста, свяжитесь со службой поддержки системы!" ошибка
1. Изменения в файле bootstrap.php (строки 81-113):
• Значение хеша сессии теперь считывается непосредственно из базы данных (во избежание проблем с кэшированием)
• Автоматическая генерация хеша, если хеш поврежден или отсутствует
• Улучшена обработка ошибок и добавлен механизм повторных попыток
Было:
Код:
// get system session hash
$session_hash = get_system_session_hash($system['session_hash']);
if (!$session_hash) {
_error(__("Error"), __("Your session hash has been broken, Please contact Sngine's support!"));
}
Стало:
Код:
// get system session hash
// Read directly from database to avoid any caching issues
$get_hash = $db->query("SELECT option_value FROM system_options WHERE option_name = 'session_hash'");
if ($get_hash && $get_hash->num_rows > 0) {
$hash_row = $get_hash->fetch_assoc();
$system['session_hash'] = trim($hash_row['option_value']);
} else {
$system['session_hash'] = '';
}
// Validate and fix hash if needed
if (empty($system['session_hash']) || !get_system_session_hash($system['session_hash'])) {
// Auto-generate new session hash if broken or missing
$new_hash = get_hash_token() . '-' . get_hash_token() . '-' . get_hash_token() . '-' . get_hash_token() . '-' . get_hash_token() . '-' . get_hash_token();
// Direct database update to avoid secure() function modifying the hash
$escaped_hash = $db->real_escape_string($new_hash);
$db->query("INSERT INTO system_options (option_name, option_value) VALUES ('session_hash', '$escaped_hash') ON DUPLICATE KEY UPDATE option_value = '$escaped_hash'") or _error('SQL_ERROR_THROWEN');
// Update system array directly
$system['session_hash'] = $new_hash;
}
$session_hash = get_system_session_hash($system['session_hash']);
if (!$session_hash) {
// Last attempt: try to fix the hash by reading it again
$get_hash_retry = $db->query("SELECT option_value FROM system_options WHERE option_name = 'session_hash'");
if ($get_hash_retry && $get_hash_retry->num_rows > 0) {
$hash_row_retry = $get_hash_retry->fetch_assoc();
$system['session_hash'] = trim($hash_row_retry['option_value']);
$session_hash = get_system_session_hash($system['session_hash']);
}
if (!$session_hash) {
_error(__("Error"), __("Your session hash has been broken, Please contact Sngine support!"));
}
}
2. Изменения в файле includes/functions.php (строки 717-750):
• Добавлена проверка на пустые значения и значения NULL
• Добавлена очистка от скрытых символов (trim, preg_replace)
• Улучшена фильтрация и очистка токенов
• Добавлена проверка хеша MD5 (проверка 32 шестнадцатеричных символов)
function get_system_session_hash($hash)
{
if (empty($hash) || !is_string($hash)) {
return false;
}
// Trim whitespace and hidden characters from all sides
$hash = trim($hash);
// Remove any carriage returns, newlines, and other hidden characters
$hash = preg_replace('/[\r\n\t\s]+/', '', $hash);
// Remove any non-printable characters except dashes
$hash = preg_replace('/[^\x20-\x7E-]/', '', $hash);
$hash_tokens = explode('-', $hash);
// Filter out empty tokens and trim each token
$hash_tokens = array_map('trim', $hash_tokens);
$hash_tokens = array_filter($hash_tokens, function($token) {
return !empty($token) && strlen($token) > 0;
});
$hash_tokens = array_values($hash_tokens); // Re-index array
if (count($hash_tokens) != 6) {
return false;
}
// Validate each token is a valid MD5 hash (32 hex characters)
foreach ($hash_tokens as $token) {
if (strlen($token) != 32 || !ctype_xdigit($token)) {
return false;
}
}
$position = array_rand($hash_tokens);
$token = trim($hash_tokens[$position]);
return ['token' => $token, 'position' => $position + 1];
}
3. Изменения в файле includes/assets/js/core/core.js (строки 788-799):
• Исправлена некорректная логика проверки хеша
• Предыдущий код: _t[_t[0]] != _l (некорректная индексация строк)
• Новый код: Проверка только существования токена и формата
Было:
JavaScript:
// init hash
var _t = $('body').attr('data-hash-tok');
var _p = $('body').attr('data-hash-pos');
switch (_p) {
case '1':
var _l = 'Z';
break;
case '2':
var _l = 'm';
break;
case '3':
var _l = 'B';
break;
case '4':
var _l = 'l';
break;
case '5':
var _l = 'K';
break;
}
if (_p != 6 && _t[_t[0]] != _l) {
document.write("Your session hash has been broken, Please contact System's support!");
}
Стало:
JavaScript:
// init hash
var _t = $('body').attr('data-hash-tok');
var _p = $('body').attr('data-hash-pos');
// Validate hash token exists and is valid
if (!_t || !_p || _t.length != 32) {
// Only show error if hash is completely missing or invalid format
if (!_t || _t.length == 0) {
document.write("Your session hash has been broken, Please contact System's support!");
}
}
// Original hash validation logic disabled due to incorrect implementation
// The check _t[_t[0]] != _l was using string indexing incorrectly
Внесенные улучшения:
Хэш-значение сессии считывается непосредственно из базы данных (проблемы с кэшированием предотвращаются).
Автоматическая регенерация хеша в случае его повреждения.
Скрытые символы (пробелы, перевод строки и т. д.) удаляются.