Joomla разработчикам: как починить пагинацию в своих расширениях для Joomla 5.1.3+

Это информация о возможном сломе обратной совместимости в классе Pagination Joomla 5.1.3+. Релиз 5.1.3 был связан с закрытием уязвимостей. В нём был изменён подход к генерации ссылок для страниц пагинации.

Как было?

До сих пор ссылки на отдельные страницы, а также ссылки на страницы "В начало", "В конец", "Вперед" и "Назад" автоматически включали все параметры запроса, которые присутствуют в текущем запросе ($app->getInput()). Такое поведение создает возможность атаки злоумышленников на заражение кэша.

Как стало?

Чтобы смягчить этот фактор, пришлось внести изменения в поведение класса Pagination. Класс разбивки на страницы по умолчанию будет включать только следующие параметры запроса в процесс генерации URL-адреса:

$defaultUrlParams = [

'format' => 'CMD',

'option' => 'CMD',

'controller' => 'CMD',

'view' => 'CMD',

'layout' => 'STRING',

'task' => 'CMD',

'template' => 'CMD',

'templateStyle' => 'INT',

'tmpl' => 'CMD',

'tpl' => 'CMD',

'id' => 'STRING',

'Itemid' => 'INT',

];

Если этих параметров достаточно для формирования корректного URL с помощью Route::_(), то можно ничего не менять. Если вам нужны нетипичные параметры (например, project_id, cat_id, product_id и т.д.), то их следует добавить в объект пагинации в методе display() вашего View.

public function display($tpl = null)
{

$app = Factory::getApplication();

$this->pagination = $this->get('Pagination');

// Flag indicates to not add limitstart=0 to URL

$this->pagination->hideEmptyLimitstart = true;

// Add additional parameters to pagination url

$queryParameterList = [

'catid' => 'int',

'project_id' => 'int',

'language' => 'string',

];

foreach ($queryParameterList as $parameter => $filter)

{

$value = $app->getInput()->get($parameter, null, $filter);

if (is_null($value))

{

continue;

}

$this->pagination->setAdditionalUrlParam($parameter, $value);

}

}

Обратите внимание, что для каждого параметра нужно указать тип фильтра: int, string, cmd, word и т.д.

Также примеры для com_finder и com_content на GitHub

#разработка #joomla #php #development

Joomla!® CMS — пожалуй, лучшая система управления контентом с открытым исходным кодом

Логотип Joomla

Joomla! — это больше, чем просто программное обеспечение, это люди, включающие разработчиков, дизайнеров, системных администраторов, переводчиков, копирайтеров, и, что самое главное — простых пользователей.

Мы рады пригласить вас в ряды нашего сообщества!

Свернуть

Коротко о главном в Joomla

Новости портала

Новое в блогах

Видео

Форум о Joomla