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

doran7

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

fixxxer

К.О.
Партнер клуба
html ты получаешь автоматом из designMode/contentEditable, а с ббкодами еще надо постараться. Собственно, вопрос - а зачем?

purifier тяжелее будет
да и фиг с ним, если сразу в кэш класть. Ну и почему тогда не markdown какой-нибудь? :)
 

MiksIr

miksir@home:~$
html ты получаешь автоматом из designMode/contentEditable
Если бы все так было идеально, не было бы сотен килобайт кода во всяких tinymce/ckeditor. В реальноси там столько дерьма лезет, и в каждом браузере своего, что все-равно чистить и чистить.
Ну и почему тогда не markdown какой-нибудь?
Ну понимаешь же, что те же яйца. Но бб код погибче все же. Например, та же цитата с указанием исходного поста - мы можем расширить [ quote ], а с markdown сложнее будет.
 

MiksIr

miksir@home:~$
Такое впечатление (чисто от балды) что визивиг только сервис юзеру делает, и может давать на выходе как сообщение отформатированное в bb-кодах, так и в HTML-кодах. Не могу оценить при этом степень издержек на безопасность, когда визивиг выдает не bb-форматирование, а html. Визивиг для bb- и визивиг для html на выходе - наверное, разную безопасность имеют, и для bb она выше..
Визивиг - это возможность браузера перевести блок в contentEditable режим и куча жаваскрипта поверх, которое вносит туда новые теги и вынимает результат. Потом результат обрабатывается и отсылается на сервер. Можем html отослать, можем сильно чищенный html послать, можем в бб-коды отреплейсить.
 

doran7

Новичок
fixxxer написал(а):
html ты получаешь автоматом из designMode/contentEditable,
А этот html (от визивига) такой же по безопасности как bb от такого же визивига? Ведь не просто так же делают визивиги для bb-кодов.

PS. MiksIr, спасибо за разъяснение про визивиг, значимо расширило понимание оного.
 

MiksIr

miksir@home:~$
purifier вполне справляется
Ну просто получается, что мы тяжулую навороченную библиотеку используем, что почистить все, оставив какие-нить b i s img.
Да и кроме чистки нам нужно еще разобраться со всякими внезапными div-ами, которые нельзя просто удалять, пустыми параграфами и т.п. и т.д.
И потом, зачем это делать на сервере, если это можно сделать на клиенте ;)
 

doran7

Новичок
MiksIr написал(а):
И потом, зачем это делать на сервере, если это можно сделать на клиенте
Имеется в виду, разметка текста от юзера в bb на клиенте?
На клиенте можно и пропарсить bb в html, если в этом есть какой-то смысл.

ksmh написал(а):
Что делать на клиенте? Чистить html? А верить кто будет клиентским данным?
Мощный аргумент... мечталово почти порушил, как сервер разгрузить.
 

fixxxer

К.О.
Партнер клуба
Ну просто получается, что мы тяжулую навороченную библиотеку используем, что почистить все, оставив какие-нить b i s img.
Да чего там тяжелого? на дискетку 1.44 не влезает? :)

Ну и почему только b i, можно таблички всякие делать, например, блоки с пресетами оформления.
 

doran7

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

MiksIr

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

Ну и почему только b i, можно таблички всякие делать, например, блоки с пресетами оформления.
Да да.. ровно до того момента, как не поменяем дизайн и чистого css наверняка не хватит, что бы сменить его у всех постов базы ;)
 

fixxxer

К.О.
Партнер клуба
Ну современным css-ом можно очень многое. А в ie<9 пусть смотрять на graceful degradation, че.
 

Vladson

Сильнобухер
1. Допустим, выбор за разработчиком, что хранить в БД - сообщение юзера, отформатированное в bb-кодах или в html-кодах.
- Почему вы не стреляли ?
- У нас было 18 причин ! Во первых у нас не было патронов....

У разработчика только один выбор. Есть задача, её надо выполнить, если ты сделал ошибку и хранишь HTML а нужен был BBCode или наоборот, то это твой факап, и после ты уже выбираешь какой костыль юзать. В 99% случаев надо хранить (не важно HTML, BBCode, "Бычки в томате") исходные данные которые ввёл пользователь. Вопрос что лучше, хранить их и в 1% случаев переписывать всё, или писать под 1% а в 99% переписывать ?
 

MiksIr

miksir@home:~$
А чем bb-коды защищают больше, чем чистый html?
Ну я вижу это так.
При переводе из ББ в HTML мы четко сами прописываем - что на что заменять. Если мы что-то упустим при замене, то скорее всего просто на вывод уйдет не замененный ббкод.
Если у нас HTML изначально, то мы его чистим. Если мы что-то упустим при чистке - на выход уйдет html, который может наделать бед. С этой точки атаковать удобнее - известен код чистки, можем проанализировать, найти багу и запостить эксплуатирующий ее HTML.
Наверно и при замене bb в html можно накосячить, не спорю, но как-то мне кажется, что вероятность меньше. В том числе и из-за меньшего объема работы, так как bb изначально проще.
 

hell0w0rd

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