Исследование. Особенности парсинга сообщений в html-кодах и в bb-кодах

  • Автор темы Автор темы doran7
  • Дата начала Дата начала
MiksIr написал(а):
И, кстати, бб коды никак визивигу не мешают,
Такое впечатление (чисто от балды) что визивиг только сервис юзеру делает, и может давать на выходе как сообщение отформатированное в bb-кодах, так и в HTML-кодах. Не могу оценить при этом степень издержек на безопасность, когда визивиг выдает не bb-форматирование, а html. Визивиг для bb- и визивиг для html на выходе - наверное, разную безопасность имеют, и для bb она выше..
 
html ты получаешь автоматом из designMode/contentEditable, а с ббкодами еще надо постараться. Собственно, вопрос - а зачем?

purifier тяжелее будет
да и фиг с ним, если сразу в кэш класть. Ну и почему тогда не markdown какой-нибудь? :)
 
html ты получаешь автоматом из designMode/contentEditable
Если бы все так было идеально, не было бы сотен килобайт кода во всяких tinymce/ckeditor. В реальноси там столько дерьма лезет, и в каждом браузере своего, что все-равно чистить и чистить.
Ну и почему тогда не markdown какой-нибудь?
Ну понимаешь же, что те же яйца. Но бб код погибче все же. Например, та же цитата с указанием исходного поста - мы можем расширить [ quote ], а с markdown сложнее будет.
 
Такое впечатление (чисто от балды) что визивиг только сервис юзеру делает, и может давать на выходе как сообщение отформатированное в bb-кодах, так и в HTML-кодах. Не могу оценить при этом степень издержек на безопасность, когда визивиг выдает не bb-форматирование, а html. Визивиг для bb- и визивиг для html на выходе - наверное, разную безопасность имеют, и для bb она выше..
Визивиг - это возможность браузера перевести блок в contentEditable режим и куча жаваскрипта поверх, которое вносит туда новые теги и вынимает результат. Потом результат обрабатывается и отсылается на сервер. Можем html отослать, можем сильно чищенный html послать, можем в бб-коды отреплейсить.
 
fixxxer написал(а):
html ты получаешь автоматом из designMode/contentEditable,
А этот html (от визивига) такой же по безопасности как bb от такого же визивига? Ведь не просто так же делают визивиги для bb-кодов.

PS. MiksIr, спасибо за разъяснение про визивиг, значимо расширило понимание оного.
 
purifier вполне справляется
Ну просто получается, что мы тяжулую навороченную библиотеку используем, что почистить все, оставив какие-нить b i s img.
Да и кроме чистки нам нужно еще разобраться со всякими внезапными div-ами, которые нельзя просто удалять, пустыми параграфами и т.п. и т.д.
И потом, зачем это делать на сервере, если это можно сделать на клиенте ;)
 
MiksIr написал(а):
И потом, зачем это делать на сервере, если это можно сделать на клиенте
Имеется в виду, разметка текста от юзера в bb на клиенте?
На клиенте можно и пропарсить bb в html, если в этом есть какой-то смысл.

ksmh написал(а):
Что делать на клиенте? Чистить html? А верить кто будет клиентским данным?
Мощный аргумент... мечталово почти порушил, как сервер разгрузить.
 
Ну просто получается, что мы тяжулую навороченную библиотеку используем, что почистить все, оставив какие-нить b i s img.

Да чего там тяжелого? на дискетку 1.44 не влезает? :)

Ну и почему только b i, можно таблички всякие делать, например, блоки с пресетами оформления.
 
Прочтя все, что в этой теме, я вроде помалу стал врубаться в смысл существования bb-кодов для разметки текста от юзера. Если мы знаем, что на сервер от юзера допустим приход текста с разметкой только в bb, то мы это сообщение от юзера просто пропускаем через strip_tags() - и это будет самой простой и эффективной фильтрацией добра от зла (защитой от XSS). Последующий парсинг ограниченного набора простых bb в HTML гораздо проще и менее затратен по ресурсам, чем полноценная фильтрация HTML, если бы он приходил от юзера вместо bb в этом случае.
 
Да чего там тяжелого? на дискетку 1.44 не влезает? :)

Ну и почему только b i, можно таблички всякие делать, например, блоки с пресетами оформления.
Да да.. ровно до того момента, как не поменяем дизайн и чистого css наверняка не хватит, что бы сменить его у всех постов базы ;)
 
Ну современным css-ом можно очень многое. А в ie<9 пусть смотрять на graceful degradation, че.
 
1. Допустим, выбор за разработчиком, что хранить в БД - сообщение юзера, отформатированное в bb-кодах или в html-кодах.
- Почему вы не стреляли ?
- У нас было 18 причин ! Во первых у нас не было патронов....

У разработчика только один выбор. Есть задача, её надо выполнить, если ты сделал ошибку и хранишь HTML а нужен был BBCode или наоборот, то это твой факап, и после ты уже выбираешь какой костыль юзать. В 99% случаев надо хранить (не важно HTML, BBCode, "Бычки в томате") исходные данные которые ввёл пользователь. Вопрос что лучше, хранить их и в 1% случаев переписывать всё, или писать под 1% а в 99% переписывать ?
 
А чем bb-коды защищают больше, чем чистый html?
Ну я вижу это так.
При переводе из ББ в HTML мы четко сами прописываем - что на что заменять. Если мы что-то упустим при замене, то скорее всего просто на вывод уйдет не замененный ббкод.
Если у нас HTML изначально, то мы его чистим. Если мы что-то упустим при чистке - на выход уйдет html, который может наделать бед. С этой точки атаковать удобнее - известен код чистки, можем проанализировать, найти багу и запостить эксплуатирующий ее HTML.
Наверно и при замене bb в html можно накосячить, не спорю, но как-то мне кажется, что вероятность меньше. В том числе и из-за меньшего объема работы, так как bb изначально проще.
 
Ну я вижу это так.
При переводе из ББ в HTML мы четко сами прописываем - что на что заменять. Если мы что-то упустим при замене, то скорее всего просто на вывод уйдет не замененный ббкод.
Если у нас HTML изначально, то мы его чистим. Если мы что-то упустим при чистке - на выход уйдет html, который может наделать бед. С этой точки атаковать удобнее - известен код чистки, можем проанализировать, найти багу и запостить эксплуатирующий ее HTML.
Наверно и при замене bb в html можно накосячить, не спорю, но как-то мне кажется, что вероятность меньше. В том числе и из-за меньшего объема работы, так как bb изначально проще.
совершенно без разницы, что бб, что html, вы знаете какие конкретно теги вам нужны, все что между нужными тегами очищается strip_tags, что <>, что [] на русской клавиатуре нет, так что смысла заставлять юзера учить бб-коды вообще не вижу, а разницы между ними при парсинге - 0.
https://github.com/mindmup/bootstrap-wysiwyg/blob/master/bootstrap-wysiwyg.js вот легкий редактор, можно переписать без зависимости от ядра бутстрапа, все что хочешь делай, а бб-коды на помойку
 
Сверху