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

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

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

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

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

Войти через центр авторизации
Похожие вопросы