/
maxvikir
/
joomla-tokenmanager-component
Обзор
Документация
Войти
/
maxvikir
/
joomla-tokenmanager-component
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
admin/helpers/tokenmanagerhelper.php
78 строк
3 KB
Кириченко Максим Викторович
Первый коммит
30 окт 2025, 16:59
30 окт 2025, 16:59
04def73
Код
Авторство
О чём код?
<?php defined('_JEXEC') or die; class TokenManagerHelper { public static function checkToken() { $app = JFactory::getApplication(); $db = JFactory::getDbo(); $params = JComponentHelper::getParams('com_tokenmanager'); $operationsLimit = $params->get('operations_limit', 1); $logRetention = $params->get('log_retention', 30); $result = ["status" => false, "message" => ""]; // Стандартная проверка CSRF-токена if (!JSession::checkToken()) { $result['message'] = JText::_('COM_TOKENMANAGER_INVALID_TOKEN'); } // Получаем данные для логирования $token = JSession::getFormToken(); $ip = $app->input->server->get('REMOTE_ADDR', '0.0.0.0', 'STRING'); $userAgent = substr($app->input->server->get('HTTP_USER_AGENT', '', 'STRING'), 0, 255); // Очистка устаревших записей (старше 30 дней) try { $dateThreshold = date('Y-m-d H:i:s', strtotime("-{$logRetention} days")); $query = $db->getQuery(true) ->delete($db->quoteName('#__tokenmanager_tokens')) ->where($db->quoteName('operation_time') . ' < ' . $db->quote($dateThreshold)); $db->setQuery($query)->execute(); } catch (Exception $e) { $result['message'] = JText::_('COM_TOKENMANAGER_DB_ERROR'); } // Проверка лимита операций try { $query = $db->getQuery(true) ->select('COUNT(*)') ->from($db->quoteName('#__tokenmanager_tokens')) ->where($db->quoteName('token') . ' = ' . $db->quote($token)) ->where($db->quoteName('operation_time') . ' >= DATE_SUB(NOW(), INTERVAL ' . (float)$operationsLimit . ' HOUR)'); $recentOperations = (int)$db->setQuery($query)->loadResult(); } catch (Exception $e) { $result['message'] = JText::_('COM_TOKENMANAGER_DB_ERROR'); } if ($recentOperations > 0) { // Логируем ошибку $logEntry = new stdClass(); $logEntry->token = $token; $logEntry->status = 1; $logEntry->ip_address = $ip; $logEntry->user_agent = $userAgent; $db->insertObject('#__tokenmanager_tokens', $logEntry); $result['message'] = JText::_('COM_TOKENMANAGER_RATE_LIMIT_EXCEEDED'); } else { // Логируем успешную операцию $logEntry = new stdClass(); $logEntry->token = $token; $logEntry->status = 0; $logEntry->ip_address = $ip; $logEntry->user_agent = $userAgent; $db->insertObject('#__tokenmanager_tokens', $logEntry); $result['status'] = true; } return $result; } }