Comments 26
def eror(self, message):
Так торопились, так торопились? :)
0
UFO just landed and posted this here
Из коротенького определения так и не понял, что такое Jevix. Можно как-нибудь иначе описать? Скажем, не: «Flask — это питоний фреймворк для веб-приложений», а «Вот предположим, вам нужно сделать крупный тяжёлый сайт без использования CMS, которые генерят глагну за 0.7 секунд и жрут 60 метров памяти. Хорошей идеей в этом случае будет использовать CMF под названием Flask, ибо...». Втыкаете? Не «решение», а «проблема — решение». И… простите, но портировать с одного языка на другой полностью, не используя возможности языка, на который переносите, — как-то не очень хорошо. Может быть, не стоит повторять ошибки и опечатки исходника?..
+4
Jevix — это библиотека для обработки html кода вводимого пользователем, Jevix-php используется в сайте habrahabr и играет самую важную роль, с прошью его мы можем писать такие красочно оформленные посты, комментарии и все что тут есть, а НЛО спит спокойно и не боится что кто-то запустит вредоносный js или покорежит страницу, каким нибудь css стилем…
А Вы что-то другое описали.
А Вы что-то другое описали.
0
Добавлю, что для django поверх этой библиотеки есть приложение django-html_sanitizer
0
Я правильно понимаю, что можно либо разрешить использование какого-то атрибута у тега, либо не разрешить? Например
Он может разрешить либо любые style, либо никаких, да?
Мы в своё время навелосипедили свой HTML cleaner (подробнее написал комментом ниже) именно из-за того, что нужно было чистить после WYSIWYG и хотелось получить результат как можно ближе к рельности.
<div style="width: 300px;">
Он может разрешить либо любые style, либо никаких, да?
Мы в своё время навелосипедили свой HTML cleaner (подробнее написал комментом ниже) именно из-за того, что нужно было чистить после WYSIWYG и хотелось получить результат как можно ближе к рельности.
0
я так понимаю вы об этом?
bleach.readthedocs.org/en/latest/clean.html#styles-whitelist
вроде бы все гибко настраивается, если надо — просто кастомный чистильщик можно довесить
bleach.readthedocs.org/en/latest/clean.html#styles-whitelist
вроде бы все гибко настраивается, если надо — просто кастомный чистильщик можно довесить
+1
Конечно, всё-равно не так гибко, как хотелось бы, но, наверно, если бы нашли эту библиотеку перед написанием велосипеда, то остановились бы на ней. Спасибо.
0
ну, я думаю эта библиотека покрывает бОльшую часть необходимого. у меня по крайней мере не хватает фантазии, что бы еще я от нее мог желать :)
+1
Пример высосан из пальца, но во всяких object, params есть атрибуты, которых не должно (порой они не мешают, но чем чище — тем лучше) быть у других тегов. То есть нужен не список всех тегов и список всех возможных атрибутов, а по сути иерархический набор правил (ну, по крайней мере, в своём велосипеде мы так и сделали :))
{
тег, {
разрешённый атрибут: {
разрешённый стиль, (разрешённые значения данного стиля),
...
},
...
},
...
}
0
ну у них почти так и сделано на самом деле:
теги задаются списком
атрибуты задаются словарем тег: разрешенные атрибуты (тег может быть *)
стили так же задаются словарем тег: разрешенные стили для этого тега (также разрешается *)
единственное что они не сделали — еще шага вглубь с валидацией значений стиля, я понимаю что это может иногда пригодиться, но думаю не так уж часто.
теги задаются списком
атрибуты задаются словарем тег: разрешенные атрибуты (тег может быть *)
стили так же задаются словарем тег: разрешенные стили для этого тега (также разрешается *)
единственное что они не сделали — еще шага вглубь с валидацией значений стиля, я понимаю что это может иногда пригодиться, но думаю не так уж часто.
+1
Если я правильно понял задачу, то валидацию значений аттрибутов можно реализовать при помощи callable-filters
PS: Опередили пока писал.
PS: Опередили пока писал.
+1
У меня тоже была необходимость чистить вводимый пользователями html, тогда мы с ilblackdragon написали свой велосипед и по сей день он отлично работает. Одна беда — никак не вынесем велосипед в отдельный проект и живёт он у нас в django-misc вот тут — HTML cleaner.
Логика достаточно простая — есть white-list, описанный в needs.cfg, из которого путём python generator.py создаётся clear.py, в котором мы ходим по DOM и на основе regexp принимаем решение оставить ли тег, если да, то какие свойства у него можно оставить. Потом можно взять clear.py как отдельный файл и вкрутить в нужный проект:
PS Меня пагает ваш Python код… правда страшно… при этом я совершенно не вижу смысла сохранять совместимость в названиях с точностью до буквы — есть очень «хорошие» примеры — Internet Explorer и Windows — они сохраняли обратную совместимость с учётом старых багов с целью того, чтобы не ломать программы, которые эти баги уже эксплуатируют…
Логика достаточно простая — есть white-list, описанный в needs.cfg, из которого путём python generator.py создаётся clear.py, в котором мы ходим по DOM и на основе regexp принимаем решение оставить ли тег, если да, то какие свойства у него можно оставить. Потом можно взять clear.py как отдельный файл и вкрутить в нужный проект:
from clear import clear_html_code
clear_html_code("<b>Hello world</b>")
PS Меня пагает ваш Python код… правда страшно… при этом я совершенно не вижу смысла сохранять совместимость в названиях с точностью до буквы — есть очень «хорошие» примеры — Internet Explorer и Windows — они сохраняли обратную совместимость с учётом старых багов с целью того, чтобы не ломать программы, которые эти баги уже эксплуатируют…
+1
P.S. Уже вынесли в отдельный велосипед — github.com/ProstoKSI/html-cleaner
0
Мне подсказали решение, но этих решений мне было недостаточно, да и всем известно что Jevix самая популярная библиотека для работы с html.
Вам советовали решения на основе html5lib, можно узнать что именно было недостаточно? Я глубоко конечно не вдавался, но кажется что Вы хотите делать то же самое, но с более простой настройкой нужных аттрибутов для элементов, а смотря на wiki.whatwg.org/wiki/Sanitization_rules, code.google.com/p/html5lib/source/browse/python/html5lib/sanitizer.py, для этого мне кажется проще в html5lib.sanitizer.HTMLSanitizerMixin.sanitize_token добавить свою проверку зависящую от элемента.
0
bleach так и делает: github.com/jsocol/bleach/blob/master/bleach/sanitizer.py
0
Зачем вы повторили Jevix с его устаревшим самостоятельным разбором HTML?
Вы могли бы уместить библиотеку в пару сотен строк, если бы использовали какую-либо реализацию DOM. В таком случае, можно было бы иметь гораздо более гибкие правила и богатейший набор возможностей.
Вы могли бы уместить библиотеку в пару сотен строк, если бы использовали какую-либо реализацию DOM. В таком случае, можно было бы иметь гораздо более гибкие правила и богатейший набор возможностей.
0
Главную вещь вы так и не решили, все white list sanitizer'ы которые я видел, достаточно хорошо удаляют не нужные теги и чистят атрибуты, но. Допустим мы хотим как на хабре вставить кусок кода, к примеру такой:
В вашей нынешней реализации, всё что внутри тега
<html>
<p>
habrahabr
</p>
</html>
В вашей нынешней реализации, всё что внутри тега
source
тоже почистится и выведет только надпись habrahabr
0
А почему вы взяли не Perl версию? Версия PHP давно уже заброшена и не развивается. Или на Perl не далеко ушел тоже?
0
Sign up to leave a comment.
Библиотека Jevix для Python