Разрешить только шестнадцатеричные HTML-сущности

Есть форум и размещение HTML запрещено.
Однако некоторые пользователи хотели бы иметь возможность публиковать некоторые символические знаки, шестнадцатеричные html-объекты, такие как:

💗

Увидеть: http://graphemica.com/%F0%9F%92%97 для получения дополнительной информации.

Мои вопросы:

  1. Безопасно ли вообще разрешать им такие символы (XSS и т. Д.)?
  2. Какую функцию лучше использовать, чтобы разрешить это? На самом деле символические HTML-объекты отображаются в виде простого текста.
  3. Я хочу запретить пользователям использовать & или же » и так далее, так что просто html-сущности, начинающиеся с &# и затем число плюс точка с запятой в конце.

Есть идеи, как это решить?

0

Решение

Другой ответ — использовать метод .text jQueries, чтобы добавить сообщение в элемент сообщения вашего форума.
Хотя вам придется изменить то, как ваш форум создает структуру сообщений.

Вы можете безопасно добавлять любую последовательность символов, и ни один из них не будет интерпретироваться браузером как HTML.

Пример:

$('#message_text').text(naughty_msg_string);
1

Другие решения

Безопасно ли вообще разрешать им такие символы (XSS и т. Д.)?

Нет, это никогда не безопасно. Например, & это просто удобный псевдоним для &, который до сих пор амперсанд. так же < является знаком меньше, и, следовательно, «наивно» разрешая числовые HTML-сущности, все еще может открыть поверхность атаки XSS, если вы забудете об этом во время обработки.

Вы можете рассмотреть вопрос о разрешении только числовых символов за пределами основной таблицы ASCII (128+), что было бы более безопасно.

Какую функцию лучше использовать, чтобы разрешить это? На самом деле символические HTML-объекты отображаются в виде простого текста.

Учитывая вышеупомянутую функцию, preg_replace_callback является хорошим кандидатом, так как он позволяет вам протестировать контент перед тем, как разрешить его.

Это также отвечает на третий вопрос, так как вы можете просто проверить числа в регулярном выражении.

0

По вопросам рекламы [email protected]