Вопрос

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

Это было полезно?

Решение

я бы предложил немного альтернативный подход:

  • не фильтруйте входящие пользовательские данные (кроме предотвращения SQL-инъекций).пользовательские данные должны быть максимально чистыми.
  • фильтровать все исходящие данные из базы данных, здесь можно использовать такие вещи, как удаление тегов и т. д.должно произойти

поддержание чистоты пользовательских данных обеспечивает большую гибкость в их отображении.фильтрация всех исходящих данных — хорошая привычка (вдоль мема «никогда не доверяй данным»).

Другие советы

Вы не указали, на чем построен форум, но если это PHP, проверьте:

http://htmlpurifier.org/

Возможности библиотеки: Белый список, удаление, правильный формат, вложение, атрибуты, безопасность XSS, безопасность стандартов

После отправки текста вы можете удалить любые/все теги, которые не соответствуют вашему предопределенному набору, с помощью регулярного выражения в PHP.

Это будет выглядеть примерно так:

find open tag (<)
if contents != allowed tag, remove tag (from <..>)
  1. Проанализируйте входные данные и удалите все HTML-теги, которые не соответствуют в точности списку, который вы разрешаете.Это может быть либо сложное регулярное выражение, либо вы можете выполнить итерацию с сохранением состояния через char[] входной строки, создав разрешенную входную строку и удалив нежелательные атрибуты в тегах, таких как img.

  2. Используйте другую систему кодирования (BBCode, Markdown).

  3. Найдите в Интернете код, который уже делает это, и используйте его в качестве основы для своей реализации.Например, это должен выполнить 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 из-за объема поддержки и функций, таких как предварительный просмотр в реальном времени.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top