HTML вместо BB

Духовность™

Продвинутый новичок
HTML вместо BB

Господа!
Такой вопрос - кто реализовывал возможность использовать пользователям на сайте HTML-теги? Есть ли какие подводные камни?

Вот ЖЖ позволяет использовать HTML. Меня это очень радует.
Список допустимых:
<a> <b> <big> <blockquote> <br> <center> <cite> <code> <dd> <div> <dl> <dt> <em> <font> <form> <h1> <h2> <h3> <hr> <i> <img> <input> <li> <marquee> <nobr> <ol> <option> <p> <pre> <s> <select> <small> <span> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul> <xmp>
В принципе, тоже самое хочу реализовать. Но банально не знаю как это сделать. Просто указать в strip_tags перечень допустимых тегов? Это не будет дырой? Что практика показывает?

На данном этапе вижу одну проблему: Незакрытые HTML-теги, в отличие от ВВ, будут работать и, соответственно, валить валидность моего XHTML. C этим видимо, ничего не поделаешь.
 

Духовность™

Продвинутый новичок
dark-demon
Ну вики-подобные теги это тоже не выход. Их нужно заново изучать, во-первых, а во-вторых, смущает их ограниченность по сравнению с HTML.
 

dark-demon

d(^-^)b
а многие пользователи сайта знают html? и какому проценту из них будет не лень вводить <blockquote> и иже с ним?
 

Bakti9rov

!*|=?
тада теги нужно на валидность проверять...
Введет юсер <b><i>TEXT</b></i>, и страница перекошена.
 

Духовность™

Продвинутый новичок
HraKK
Ну он имел в виду, что если каждый блок сообщения не разделять ячейкой таблицы или элементом уровня блока, то "эффект" от незакрытого тега пойдёт "до конца".
 

Xel_Naga

Новичок
Re: HTML вместо BB

Автор оригинала: triumvirat
Господа!
Такой вопрос - кто реализовывал возможность использовать пользователям на сайте HTML-теги? Есть ли какие подводные камни?

Вот ЖЖ позволяет использовать HTML. Меня это очень радует.
Список допустимых:


В принципе, тоже самое хочу реализовать. Но банально не знаю как это сделать. Просто указать в strip_tags перечень допустимых тегов? Это не будет дырой? Что практика показывает?

На данном этапе вижу одну проблему: Незакрытые HTML-теги, в отличие от ВВ, будут работать и, соответственно, валить валидность моего XHTML. C этим видимо, ничего не поделаешь.
<a href="link" onclick="javascript: alert('А вот фигу тебе');">Кликни, и получишь 1'000$ бесплатно</a>
Намёк ясен? :)

Если незнаешь как это делать, то лучше не делай(т.к. то, что я написал выше очень серьёзная дыра), но если прямо сильно хочется то удачи тебе :)
 

Qwerty

Новичок
Имхо, использование html пользователем много проблем создаст. Если это пользователь, которому можно доверять (редактор сайта, например) - одно дело, если кто попало сможет писать - жуть (пример выше). Но в любом случае ничего хорошего, редактор тоже может ошибок наделать и не разобраться.
Лучше использовать wysiwyg или код наподобие BB.
 

tashkentchi

Новичок
Qwerty, Наличие wysiwyg'а - не спасение. Так как

а) большинство визивигов позволяют вручную править хтмл-код;

б) отключив жаваскрипт можно комфортно вбивать в форму что угодно;

в) некоторые плагины к нормальным браузерам позволяют что угодно сделать с формой. В том числе с визивигом.

Все равно придется фильтровать полученные данные на сервере. Независимо от того, стоит визивиг или нет.

Навскидку, я бы решил эту задачу так:

1. Тиди для исправления кода.

2. ДОМ для избавления от всех неразрешенных тегов и атрибутов, фильтрации значений разрешенных атрибутов.
 

Qwerty

Новичок
Лишнее доказательство, что визивиг - зло. :) Но, к сожалению, необходимое и вполне приемлемое для использования в админках. А посетителю - BB или его аналог в зубы.
А проверять html на стороне сервера - можно, не не слишком ли сложно?
 

Духовность™

Продвинутый новичок
tashkentchi
DOM это идея! Это, получается, нужно будет составить список разрешенных и не очень атрибутов и тегов?

А тиди это что?
 

tf

крылья рулят
<a href="link" onclick="java script: alert('А вот фигу тебе');">Кликни, и получишь 1'000$ бесплатно</a>
легко фильтруется до
<a href="link">Кликни, и получишь 1'000$ бесплатно</a>
triumvirat в данном случае лучше разрешеных :)
 

Xel_Naga

Новичок
Автор оригинала: tf
легко фильтруется до
<a href="link">Кликни, и получишь 1'000$ бесплатно</a>
triumvirat в данном случае лучше разрешеных :)
Согласен, легко отфильтровать когда знаешь что именно нужно отфитровать, но есть ещё куча вариантов, и их не стоит забывать :)

Просто в случае, если фильтровать, то всё таки быстрей/безопасней получится сделать BB код
 

dark-demon

d(^-^)b
обезвреживание html - 10-15 строчек кода на пхп с использоваием дома

у ббкодов никаких преимуществ в плане безопасности - у них просто более короткая и удобная запись.
 

Qwerty

Новичок
Обсудим, какие 10-15 строчек кода могут обезвредить html?
Думаю, для многих это неочевидно. А раз тема как раз об этом, такой код был очень полезен в ней с точки зрения хотя бы будущего поиска по форуму.
Как сказал Xel_Naga, сложно предвидеть все шаги, которые может предпринять "хакер".
 

tf

крылья рулят
Согласен, легко отфильтровать когда знаешь что именно нужно отфитровать, но есть ещё куча вариантов, и их не стоит забывать
по мне лучше, лучше все что неразрешено запрещено, и по этому принципу работать ;)
 

dark-demon

d(^-^)b
с помощью xpath выдираем все тэги - неразрешённые удаляем
аналогично с аттрибутами
ну и под конец берём все аттрибуты href и src и производим удаление инъекций

-~{}~ 13.09.07 13:58:

код вечером может быть выложу
 

ONK

Пассивист PHPСluba
triumvirat, основная проблема - необходимость полного анализа HTML кода на стороне сервера. Нужно проверять на допустимость наличия каждый тэг и на допустимость значения каждый атрибут тэга.
Основная сложность - это анализ допустимости структуры таблицы.
К тонкостям можно отнести необходимость контроля уровня взаимной вложенности различных тэгов и взаимной вложенности подобных тэгов.
 
Сверху