Как правильно экранировать HTML?

Вопрос: я хочу из обычных смайлов преобразовать их в emoji apple. Я это сделал, но здесь вопрос про безопасность. Я использую laravel и в html вывожу {{ toEmoji($text) }}, возвращается текст с тегами "img", и смайлы конечно не отображаются. Если вывожу {!! toEmoji($text)!!}, то всё ок, но так можно отправить js код, и он отработает.

Как вообще правильно экранировать? Или нужно как-то код сохранять в БД на этапе получения текста, если да, то как это делается? У вк есть смайлы и там всё хорошо работает, всякий JS не пропускает, а смайлы отображает.
  • Вопрос задан
  • 243 просмотра
Решения вопроса 1
Tesla
@Tesla
{{ toEmoji($text) }} — этот тот же {!! toEmoji($text)!!} только с экранированием. Что мешает запустить экранирование вручную?
{!! toEmoji(e($text))!!}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar
Делай добро и бросай его в воду.
Можно, конечно, чистить код от определенных тегов и атрибутов. Но это не совсем хороший путь. Сегодня есть атрибут onclick, который вы успешно вырезаете, а завтра изобретут новый атрибут doubleclick, а через код - tripleclick. И каждый раз вам нужно будет допиливать свой парсер.

Лучше подойти к вопросу кардинально - сделать белый список тегов и их атрибутов. А всё остальное вырезать без жалости. Правда, для этого вам придётся распарсить код полностью, а потом запарсить обратно (пропуская лишь разрешенное). Написать такой парсер чуть сложнее, но оно того стоит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы