Фильтрация полей с помощью Jevix, когда на сайте используется Fenom
Если пользователи что-то вводят на сайте, а вы сохраняете эти данные в базу, то при выводе необходимо фильтровать теги, чтобы не допустить, например, XSS-атаки.
С этой задачей прекрасно справляется Jevix. Но только что столкнулся с проблемкой.
На сайте используется Fenom. И если пользователь введет в поле, например
То Jevix спокойно пропустит фигурные скобочки, а Fenom с удовольствием их обработает. Хорошо, когда фигурные скобки можно вырезать из текста при сохранении. А что делать, если их надо сохранить и вывести?
Я пробовал перед тем, как «подсунуть» поле Jevix'у произвести замену на html-коды скобок. Но вы Jevix жестко заложено преобразование спец-символов в сущности.
В результате, Jevix сводит эту замену на «нет». Я решил проблемку копированием сниппета Jevix и добавлением замены прямо в него. Сниппет JevixFenom

Редактор вырезает HTML-коды символов, поэтому последняя строчка картинкой вставлена =))
Может, стоит оформить пулл-реквест Василию? Добавить, например, настройку «Заменять фигурные скобки»… Или вообще проверять настройки системы и, если найден Fenom, включать эту замену принудительно?
А, может быть, кто-то уже решал такую проблему до меня? Вообще есть другой способ ее решения?
С этой задачей прекрасно справляется Jevix. Но только что столкнулся с проблемкой.
На сайте используется Fenom. И если пользователь введет в поле, например
{if true}
It's worked
{else}
False
{/fi}То Jevix спокойно пропустит фигурные скобочки, а Fenom с удовольствием их обработает. Хорошо, когда фигурные скобки можно вырезать из текста при сохранении. А что делать, если их надо сохранить и вывести?
Я пробовал перед тем, как «подсунуть» поле Jevix'у произвести замену на html-коды скобок. Но вы Jevix жестко заложено преобразование спец-символов в сущности.
В результате, Jevix сводит эту замену на «нет». Я решил проблемку копированием сниппета Jevix и добавлением замены прямо в него. Сниппет JevixFenom
<?php
/** @var array $scriptProperties */
/** @var Jevix $Jevix */
if (!$modx->loadClass('jevix', MODX_CORE_PATH . 'components/jevix/model/jevix/', false, true)) {
return 'Could not load Jevix!';
}
$Jevix = new Jevix($modx, $scriptProperties);
// После обработки скобки заменяются на html-коды
Редактор вырезает HTML-коды символов, поэтому последняя строчка картинкой вставлена =))
Может, стоит оформить пулл-реквест Василию? Добавить, например, настройку «Заменять фигурные скобки»… Или вообще проверять настройки системы и, если найден Fenom, включать эту замену принудительно?
А, может быть, кто-то уже решал такую проблему до меня? Вообще есть другой способ ее решения?
Комментарии: 26
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Выпущу обновление Tickets с фильтрацией тегов Fenom в пользовательских документах.
Почему он должен фильтровать скобочки? Это и раньше делал сам Tickets.
Но я не настаиваю.
Поэтому для MODX их вырезает Tickets.
Именно Tickets позволяет добавлять документы с опасными тегами, именно он их и должен фильтровать.
Уже завтра он так и будет делать, сейчас я просто в гостях.
Ну посмотри уже исходники, что ли. Они же не просто так открыты.
Скобочки в html entities не попадают. Это автор Jevix предусмотрел от всяких XSS, а не тегов MODX.
[], {} работают в Jevix без вопросов.
А мне хочется, чтобы выводились именно кодом, а не преобразовывались в символы
Вот есть у меня объект, modExtraItem, который пользователи могут добавлять на сайт/редактировать.
Я знаю, что пользователь может ввести скобки, поэтому объект я вывожу таким сниппетом:
Если вывести так, то выводится нормально — Fenom не обрабатывает такие скобки
Но я хочу еще и типографить поля этого объекта. Я не стал писать свой сниппет для этого, потому что я наглый и ленивый, а взял существующий — Jevix.
Оп, и теги Fenom стали обрабатываться, потому что Jevix такой добрый заменил
Ну, чтобы пользователь не смог тупо написать
а иначе, все эти проверки обходились бы очень легко.
Может, ленивому разработчику лучше сначала отдавать документ Jevix, а потом уже экранировать всякое опасное, как это делает Tickets?
В общем, ты свою проблему решил, я Tickets обновлю завтра, а остальным разработчикам могу только посоветовать думать, что они делают.
И Jevix, и Fenom, и создание всякого с фронтенда — это всё не работает по умолчанию, нужно включить и использовать самостоятельно.
Fi1osofМы обсуждали тут у себя проблемы безопасности в текущей реализации. Печально, но, скорее всего все-таки придется полностью пересматривать логику его работы.
На этом сайте, например, теги Fenom не работают в тикетах, правда?
Fi1osofИ хорошо, давай не будем о том кто какой риск несет. Другой вопрос: ты усматриваешь возможность пофиксить это проблему?
Могу убрать и системную настройку, но уверен, что будет очень много недовольных.
Fi1osofА вот у Jevix теперь есть новый параметр escapeTags, выключенный по умолчанию.
Как видно, сниппет заодно научился понимать JSON в $options.
Надеюсь, теперь все будут довольны.
Не подскажешь, чем ее заменить, если не используется Fenom?
Попробуй некэшированным вызвать.