Фильтрация опасных данных(тэгов) после WYSIWYG редактора

tolik777

Новичок
Фильтрация опасных данных(тэгов) после WYSIWYG редактора

Вопрос такой.
В качестве WYSIWYG редактора использую TinyMCE.
Но TinyMCE никак не проверяет выходные данные, например можно использовать simple и повставлять туда любые тэги iframe, table, div и т.д. Да и сам tinyMCE можно спокойно обойти послав данные FORM напрямую в скрипт. Наверное это относится к любому WYSIWYG-редактору.
Вопрос в том, чтобы как и какие данные отфильтровать, для исключения различных XSS атак и т.п.? Например понятно, что нужно исключать тэги <frame>, <iframe>, <srcipt, <?, <?PHP и т.д.
Может у кого-нибудь есть готовое решение "отсеивания" всех опасных тэгов после tinyMCE?
 

kil

Новичок
можно так, например:
разрешенные теги: <b></b> <i></i> и т.п.
1. Получаешь текст из формы
2. Заменяешь в тексте разрешенные теги: например, заменяешь <b> на , <i> на и т.д...
3. Вычищаешь из текста все остальные (неразрешенные) теги
4. Заменяешь обратно на <b> и т.д.

как вариант, можно попробовать написать регулярное выражение :)
 

Фанат

oncle terrible
Команда форума
Объясните мне, кто-нибудь: нафига вообще визивиг редактор вешать на улицу?
Чтобы спамер пупкин писал свои письма про 7 кошельков аршинными буквами?
 

Фанат

oncle terrible
Команда форума
в свободный доступ каждому встречному-поперечному
 

AmadMike

Новичок
Ну мож он что-то наподобие форума делал, чтоб народ так сказать словечки выделял.
Сделай bb-коды и не заморачивайся.
Что скрипт то твой делает?
 

Фанат

oncle terrible
Команда форума
вот как раз наподобие форума в интерннете полно.
Но при этом ни одного с визивигом я не видел.
об этом и речь
 

tolik777

Новичок
Я не пойму что вы тут за форумы обсуждаете? При чем тут форум? Я разве писал что я это на форум собираюсь встраивать? Где я написал что я WYSIWYG на форум собираюсь встраивать? И вообще какая разница, мало ли куда человек встроить WYSIWYG хочет. Если они есть, то почему бы их не использовать? А с bbcode я знаком и использую их, но человеку к примеру журналисту вряд ли захочеться разбираться с bbcode, а WYSIWYG намного удобнее.
А мой скрипт будет использоваться там где есть ограниченый круг людей, но защиту все равно сделать не помешает.
 

denver

?>Скриптер
но человеку к примеру журналисту вряд ли захочеться разбираться с bbcode
Кстати не факт. В википедии свой формат оформления статей, наподоие ббкода. И имхо для статей даже лучше ббкодов, потому что позволяет оформлять всё в едином стиле.
 

tolik777

Новичок
Тем не менее у меня есть проект, где я использовал для оформления bbcode. Многие все равно не умеют грамотно работать с bbcode и текст иногда приходиться доформатировать.
В моем случае, я посчитал, что tinyMCE для моей задачи будет намного удобнее встроить и быстрее. И плюс для пользователей это намного легче и удобнее, особенно для человека, далеких от компьютера, но постоянно работающих в Word.
Поэтому выбор bbcode vs WYSIWYG, я тут не обсуждаю. Я для себя сделал выбор для этой конкретной задачи.
Тема совсем о другом.
 

AmadMike

Новичок
Ну ладно, ты спросил есть ли готовое решение, тебе дали ссылку - PEAR::HTML_Safe.
Ну а если сам будешь делать, то по-мойму алгоритм ясен, ничего особо сложного тут нет, просто парсиш текст и удаляешь ненужные тэги (если этим ограничивается задача).
 

dimagolov

Новичок
pilot911, тебе не кажется, что за 3 года HTMLPurifier мог банально устареть? не говоря уж о том, что zarus больше двух лет сюда ничего не пишет.
 

pilot911

Новичок
не кажется... в феврале вышла версия 3.3.0, а, кроме того, такие универсальные вещи так быстро не устаревают

-~{}~ 14.06.09 05:22:

вот пример использования HTMLPurifier , который удаляет XSS уязвимости 122 видов из входящего HTML - подробнее о видах удаляемых xss на странице http://htmlpurifier.org/live/smoketests/xssAttacks.php


PHP:
	function	getSafeHTML($html) {
		
		$config = HTMLPurifier_Config::createDefault();

		// configuration goes here:
		$config->set('Core', 'Encoding', 'UTF-8'); // replace with your encoding
		$config->set('HTML', 'Doctype', 'XHTML 1.0 Transitional'); // replace with your doctype
		
		$purifier = new HTMLPurifier($config);
		return	$purifier->purify($html);
		
	}
 
Сверху