Skip to content

fix(security): экранировать поля товара в гриде, галерее и чанке - #934

Merged
biz87 merged 1 commit into
betafrom
fix/issue-920-stored-xss
Oct 19, 2026
Merged

biz87 merged 1 commit into
betafrom
fix/issue-920-stored-xss

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Закрывает stored XSS в трёх местах, куда попадают данные товара и имя источника файлов.

  • В гриде «Товары категории» значения {field} в HTML-шаблоне колонки экранируются перед v-html. Разметка самого шаблона (ссылка на товар) остаётся.
  • В утилите галереи имя Media Source выводится текстом, ссылка на источник собирается из числового id. Ключ лексикона с HTML и {0} заменён короткими подписями (ru/en).
  • В чанке ms3_products_row поля pagetitle, description, vendor_name, article, thumb и значения color/size проходят через Fenom |e. Глобальный auto_escape не включается.

Блок превью в галерее по-прежнему идёт через v-html: ключ и значение уже проходят htmlspecialchars на PHP.

Тип изменений

  • Исправление бага (bugfix)
  • Новая функциональность (feature)
  • Критическое изменение (breaking change)
  • Изменение документации

Связанные Issues

Closes #920

Как это было протестировано?

  • Локально протестировано
  • Тесты пройдены (composer ci:php из core/components/minishop3)
  • PHPStan без новых ошибок (composer stan:prepare && composer stan)
  • ESLint без ошибок (npm run lint:ci из vueManager)

Vitest: src/utils/escapeHtml.test.js и src/utils/displayFormatters.test.js (11 тестов). Строка с < и кавычкой остаётся текстом, ссылка и {id} на месте.

Скриншоты (если применимо)

До После

Чеклист

  • Код следует стилю проекта
  • Добавлены/обновлены тесты (если применимо)
  • Обновлена документация (если применимо)
  • Добавлены записи в лексиконы (ru + en)
  • Обновлён CHANGELOG.md
  • PR имеет понятное название и описание

Дополнительные заметки

CHANGELOG не трогал: записи добавляются при подготовке релиза. PHPUnit и PHPStan для этого diff не запускал: правки в Vue, лексиконе и Fenom-чанке.

…ины (#920)

Значения в HTML-шаблоне колонки и имя источника файлов больше не попадают в разметку как есть, а поля карточки товара на витрине проходят через Fenom |e.
@Ibochkarev
Ibochkarev requested a review from biz87 October 18, 2026 17:40
@biz87
biz87 merged commit 83f60cb into beta Oct 19, 2026
6 checks passed
@biz87
biz87 deleted the fix/issue-920-stored-xss branch October 19, 2026 10:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] Stored XSS: неэкранированный вывод полей товара и имени Media Source (v-html, чанк витрины)

2 participants