Ограничение ввода HTML в текстовое поле
-
03-07-2019 - |
Вопрос
Как ограничить типы HTML, которые пользователь может ввести в текстовое поле?Я веду небольшой форум, используя специальное программное обеспечение, которое я тестирую в бета-версии, но мне нужно знать, как ограничить ввод HTML.Какие-либо предложения?
Решение
я бы предложил немного альтернативный подход:
- не фильтруйте входящие пользовательские данные (кроме предотвращения SQL-инъекций).пользовательские данные должны быть максимально чистыми.
- фильтровать все исходящие данные из базы данных, здесь можно использовать такие вещи, как удаление тегов и т. д.должно произойти
поддержание чистоты пользовательских данных обеспечивает большую гибкость в их отображении.фильтрация всех исходящих данных — хорошая привычка (вдоль мема «никогда не доверяй данным»).
Другие советы
Вы не указали, на чем построен форум, но если это PHP, проверьте:
Возможности библиотеки: Белый список, удаление, правильный формат, вложение, атрибуты, безопасность XSS, безопасность стандартов
После отправки текста вы можете удалить любые/все теги, которые не соответствуют вашему предопределенному набору, с помощью регулярного выражения в PHP.
Это будет выглядеть примерно так:
find open tag (<)
if contents != allowed tag, remove tag (from <..>)
Проанализируйте входные данные и удалите все HTML-теги, которые не соответствуют в точности списку, который вы разрешаете.Это может быть либо сложное регулярное выражение, либо вы можете выполнить итерацию с сохранением состояния через char[] входной строки, создав разрешенную входную строку и удалив нежелательные атрибуты в тегах, таких как
img
.Используйте другую систему кодирования (BBCode, Markdown).
Найдите в Интернете код, который уже делает это, и используйте его в качестве основы для своей реализации.Например, это должен выполнить Slashcode, поэтому найдите его реализацию в Perl и используйте регулярные выражения (которые, как я предполагаю, там есть)
Независимо от того, что вы используете, обязательно узнайте, какой тип HTML-контента может быть опасным.
напримерТег <script> довольно очевиден, но тег <style> не менее плох в IE, поскольку он может вызывать команды JScript.
Фактически, любой атрибут style="..." может вызывать скрипт в IE.
<object> станет еще одним тегом, от которого стоит устать.
PHP поставляется с простой функцией Strip_tag удалить HTML-теги.Это позволяет не удалять определенные теги.
Пример #1 Пример использования функции Strip_tags()
<?php
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";
// Allow <p> and <a>
echo strip_tags($text, '<p><a>');
?>
В приведенном выше примере выводится:
Test paragraph. Other text
<p>Test paragraph.</p> <a href="#fragment">Other text</a>
Лично для форума я бы использовал BBCode или Markdown из-за объема поддержки и функций, таких как предварительный просмотр в реальном времени.