@ netrox база данных не проблема, вывод браузера.
Единственная проблема - окончательный рендеринг, который может быть нарушен HTML-кодом, вставленным пользователем. Например, пользователь может открыть тег <li>
, но никогда не закрывать его, который, в зависимости от структуры страницы, потенциально может нарушить весь следующий макет. Или другой пример: откройте тег <strong>
, не закрывая его, и оставшийся контент будет выделен жирным шрифтом.
Таким образом, должны проверяться не только разрешенные теги, но как именно вы разрешаете одни теги, но не другие? Потому что очень просто предотвратить синтаксический анализ всех тегов HTML, используя, например, метод PHP htmlspecialchars()
, но когда дело доходит до разрешения некоторых тегов, вам придется искать другие способы. Существует PHP-функция strip_tags()
, которая удаляет (полностью удаляет) недопустимые теги, но в то же время это означает неправильное изменение содержимого пользователя, предотвращая, например, публикацию простого кода (код для поделиться / показать, а не код для обработки).
Помимо нарушения макета, вы должны учитывать атаки XSS, такие как вставка javascript в атрибут href ссылки, которая, например, может перенаправить пользователей на другой сайт. Посмотрите этот длинный список возможных атак XSS: https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
Как видите, предотвратить интерпретацию всех HTML-тегов очень просто, но предотвратить только некоторые теги гораздо сложнее. Чтобы понять это, вы можете взглянуть на огромную инфраструктуру " HTML Purifier ", единственная цель которой - разрешить некоторые HTML-теги и убедиться, что выведенный HTML-код действителен (то есть не нарушит страницу) и без атак XSS.