Здравствуйте, поставил WYSIWYG редактор CKEditor, выбирал между markdown и html, выбрал html и видимо зря.
Текстовые поля у меня фильтруются все на вводе, думаю все нормально у меня, дыр нет, но разметка поста ни как не выводилась дошло что не так, поставил на вывод htmlspecialchars_decode() и о чудо, появилось XSS. Подумав 5 мин пришел к тому, что все исправит - strip_tags, но не тут то было, xss и в img можно же вставить, опять не выход. Теперь вот думаю либо CKEditor на markdown перевести, но конвертор markdown в html что-то не охота писать, либо что-то с выводом html придумать, что мне кажется проще. Попробовал какую-то jevix библиотеку, увы она не работает, еще нашел htmlpurifier, но как им пользоваться не понятно. Кто, что думает ? Какой лучше оставить редактор markdown или html если html, то первый вопрос топика актуален, если второй, то как markdown в html оперативно конвертировать? Я так понял можно и с помощью js библиотек, но как лучше js или самому на php написать обработчик ?
Поищи библиотеку, которая будет автоматически исправлять не закрытые теги и нужно будет скрипты, теги стиля удалять из введенного. Где-то находил такую, но сейчас нет возможности искать
Используй любой понравившийся редактор. Абсолютно любой. Пусть делает все что надо, и так как ему надо. Это не имеет значения. В результате ты должен получить у себя на сервере готовый HTML код. Как ты его будешь получать - не имеет значения, хоть тебе с фронта он прилетит, хоть ты его сгенерируешь из markdown, который с фронта прилетит, хоть прочтешь из файла, но работать придется именно с этим HTML кодом. Тебе надо будет его обезопасить, а для этого существуют готовые инструменты.
DevMan, На самом деле не все так однозначно, и в каждом случае надо смотреть что и как. Например комментарии проще 1 раз проверить на вводе, а статьи блога лучше фильтровать на выводе, а то сегодня хочу давать возможность вставлять внешние ссылки, завтра не хочу, послезавтра разметку заголовков запрещу... Вариативно короче. И от сырца независимо.
Фильтрация само по себе слово неудачное, вообще непонятно, что оно означает.
А если разобраться со словами, то оба правы: валидация на входе, форматирование на выходе.
В данном случае этому горемыке на надо ничего "фильтровать". Надо валидировать HTML на входе, и потом выводить как есть.
DevMan, проблемы "постоянной фильтрациии" решаются мемоизацией данных. А вот в обратном случае, проблемы потери данных из исходного текста не решаются никак.