Pull to refresh

Comments 26

def eror(self, message):

Так торопились, так торопились? :)
нет, именно так и называет функция в php версии, я не знаю какими побуждениями пользовался автор назвав ее так.
Так это еще хуже, вы даже не смотрели что переносили...?
UFO just landed and posted this here
извиняюсь опечатка, «Автозамена»
Из коротенького определения так и не понял, что такое Jevix. Можно как-нибудь иначе описать? Скажем, не: «Flask — это питоний фреймворк для веб-приложений», а «Вот предположим, вам нужно сделать крупный тяжёлый сайт без использования CMS, которые генерят глагну за 0.7 секунд и жрут 60 метров памяти. Хорошей идеей в этом случае будет использовать CMF под названием Flask, ибо...». Втыкаете? Не «решение», а «проблема — решение». И… простите, но портировать с одного языка на другой полностью, не используя возможности языка, на который переносите, — как-то не очень хорошо. Может быть, не стоит повторять ошибки и опечатки исходника?..
UFO just landed and posted this here
Jevix — это библиотека для обработки html кода вводимого пользователем, Jevix-php используется в сайте habrahabr и играет самую важную роль, с прошью его мы можем писать такие красочно оформленные посты, комментарии и все что тут есть, а НЛО спит спокойно и не боится что кто-то запустит вредоносный js или покорежит страницу, каким нибудь css стилем…

А Вы что-то другое описали.
В Python для такого есть отличная библиотека bleach
Я правильно понимаю, что можно либо разрешить использование какого-то атрибута у тега, либо не разрешить? Например
<div style="width: 300px;">

Он может разрешить либо любые style, либо никаких, да?

Мы в своё время навелосипедили свой HTML cleaner (подробнее написал комментом ниже) именно из-за того, что нужно было чистить после WYSIWYG и хотелось получить результат как можно ближе к рельности.
Конечно, всё-равно не так гибко, как хотелось бы, но, наверно, если бы нашли эту библиотеку перед написанием велосипеда, то остановились бы на ней. Спасибо.
ну, я думаю эта библиотека покрывает бОльшую часть необходимого. у меня по крайней мере не хватает фантазии, что бы еще я от нее мог желать :)
Пример высосан из пальца, но во всяких object, params есть атрибуты, которых не должно (порой они не мешают, но чем чище — тем лучше) быть у других тегов. То есть нужен не список всех тегов и список всех возможных атрибутов, а по сути иерархический набор правил (ну, по крайней мере, в своём велосипеде мы так и сделали :))

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

теги задаются списком
атрибуты задаются словарем тег: разрешенные атрибуты (тег может быть *)
стили так же задаются словарем тег: разрешенные стили для этого тега (также разрешается *)

единственное что они не сделали — еще шага вглубь с валидацией значений стиля, я понимаю что это может иногда пригодиться, но думаю не так уж часто.
Если я правильно понял задачу, то валидацию значений аттрибутов можно реализовать при помощи callable-filters
PS: Опередили пока писал.
У меня тоже была необходимость чистить вводимый пользователями html, тогда мы с ilblackdragon написали свой велосипед и по сей день он отлично работает. Одна беда — никак не вынесем велосипед в отдельный проект и живёт он у нас в django-misc вот тут — HTML cleaner.

Логика достаточно простая — есть 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 — они сохраняли обратную совместимость с учётом старых багов с целью того, чтобы не ломать программы, которые эти баги уже эксплуатируют…
Мне подсказали решение, но этих решений мне было недостаточно, да и всем известно что 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 добавить свою проверку зависящую от элемента.
Зачем вы повторили Jevix с его устаревшим самостоятельным разбором HTML?

Вы могли бы уместить библиотеку в пару сотен строк, если бы использовали какую-либо реализацию DOM. В таком случае, можно было бы иметь гораздо более гибкие правила и богатейший набор возможностей.
Главную вещь вы так и не решили, все white list sanitizer'ы которые я видел, достаточно хорошо удаляют не нужные теги и чистят атрибуты, но. Допустим мы хотим как на хабре вставить кусок кода, к примеру такой:

<html>
    <p>
       habrahabr
    </p>
</html>


В вашей нынешней реализации, всё что внутри тега source тоже почистится и выведет только надпись habrahabr
А почему вы взяли не Perl версию? Версия PHP давно уже заброшена и не развивается. Или на Perl не далеко ушел тоже?
Sign up to leave a comment.

Articles