С детства, чуть ли с полета Гагарина, мама учила меня - Сынок, нельзя разрешать HTML в постах НЕЛЬЗЯ! А то будет кака и бяка! Я и не разрешал. А вот возникла необходимость разрешить хоть себе, любимому - полез в код и, честно говоря, ахнул.
Итак: светлая голова, мускулистые руки, драчевый напильник, пиво по желанию. Берем за жабры includes/functions_wysiwyg.php, а если точнее - функцию function convert_wysiwyg_html_to_bbcode, которая и отвечает за все это счастье.
Первый же взгляд просто подкашивает:
PHP Code:
if (!$allowhtml)
{
$text = str_replace('<br/>', '<br />', $text);
$text = preg_replace('#<script[^>]*>(.*)</script>#siU', '', $text);
$text = strip_tags($text, '<b><strong><i><em><u><a><div><span><p><blockquote><ol><ul><li><font><img><br><h1><h2><h3><h4><h5><h6>');
}
Это все! Нет, это правда все! То есть из поста выкусываются все скрипты (что совершенно верно, нечего всякое пихать) и все HTML коды, за исключением перечисленных. И это, собсно, вся разница.
То есть простор для творчества это нам дает широчайший. А почему это при разрешенном HTML в пост можно,к примеру, скрипты пихать? Выкидываем... И так далее...
Были проблемы со вставкой таблиц при копипасте - а КАК им не быть, если теги таблиц вырезаются? Добавил в список исключений
PHP Code:
<table><tr><td><th>
- пошел, пошел процесс!
Далее:
Поскольку при копипасте совершенно неизбежно копирование ссылок на несуществующие на вашем сайте стили - можно их подчистить прямо тут же, не отходя от кассы.
PHP Code:
$text = preg_replace ('#<table.*>#iU','<table width="100%" border="1">',$text);
$text = preg_replace ('#<tr.*>#iU','<tr>',$text);
$text = preg_replace ('#<p.*>#iU','<p>',$text);
ну и бла-бла-бла
Кто кинет в меня камнем и скажет, что от этого безопасность форума упала ниже плинтуса? Хотя, справедливости ради, хочу сказать, что HTML я пока разрешил только себе, с помощью Allow HTML to Usergrous/
Но.... Вставить видео (код с видеохостинга) - да ради Бога! Аудио типа Яндекс - без проблем! И много-много чего еще полезного.
А теперь то, за ради чего я все это написал. Давайте помозгуем сообча,
что конкретно надо запретить, чтобы спокойно разрешить HTML и простоюзерам. Задача решаемая и несложная. Нужно только четко определиться, что из тегов несет потенциальную угрозу.
Есть идеи и предложения?
ЗЫ проблему с неверной расстановкой перевода строки я там тоже решил, причем отнюдь не через правку модулей и админ имеет возможность писать при включенном HTML точно так же, с ENTER вместо BR. Напильник - незаменимая штука в хозяйстве!