Ограничение ввода HTML в текстовое поле - PullRequest
1 голос
/ 01 октября 2008

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

Ответы [ 6 ]

2 голосов
/ 01 октября 2008

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

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

поддержание чистоты пользовательских данных позволяет более гибко их отображать. Фильтрация всех исходящих данных - это хорошая привычка (наряду с мемом никогда не доверять).

2 голосов
/ 01 октября 2008

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

http://htmlpurifier.org/

Особенности библиотеки: Белый список, Удаление, Правильно сформированные, Вложенность, Атрибуты, XSS-сейф, Стандарты-сейф

0 голосов
/ 06 ноября 2008

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

0 голосов
/ 01 октября 2008

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

например. тег довольно очевиден, но тег

0 голосов
/ 01 октября 2008
  1. Анализирует входные данные и удаляет все HTML-теги, которые не соответствуют точно списку, который вы разрешаете. Это может быть либо сложное регулярное выражение, либо вы можете выполнить итерацию с учетом состояния с помощью char [] входной строки, создавая разрешенную входную строку и удаляя нежелательные атрибуты в тегах, таких как img.

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

  3. Найдите в сети некоторый код, который уже делает это, чтобы использовать его в качестве основы для своей реализации. Например, Slashcode должен выполнить это, поэтому ищите его реализацию в Perl и используйте регулярные выражения (которые, как я предполагаю, есть)

0 голосов
/ 01 октября 2008

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

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

find open tag (<)
if contents != allowed tag, remove tag (from <..>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...