2017-01-30 4 views
0

Мне нужно разрешить встроенный "style=position: absolute;" вывод sanitize(post.content). Я обнаружил, что documentation for Rails 4 сказалRails 5 whitelist css собственность для sanitize хелпер

config.action_view.sanitized_allowed_css_properties = ['position'] 

в application.rb бы добавить свойства в белый список, но я не могу найти документацию ли это по-прежнему имеет место для Rails 5 и это, кажется, не работает после перезагрузки сервер несколько раз. Есть ли способ легко добавлять свойства whss в CSS? Этот answer for Rails 4 предлагает патч обезьяны, но я не уверен, где и как это сделать.

Обновление: установка gem rails-deprecated_sanitized разрешает работу указанной выше строки конфигурации, поэтому похоже, что sanitized_allowed_css_properties устарела. Конечно, есть ли способ сделать это в Rails 5? Я не могу сделать шаг назад до 4, и мне нужно, чтобы встроенный в белый список позиций стиля для того, чтобы получить плагин третьей стороны для работы (CKEditor + Iframely)

ответ

0

Отработка this answer и список разрешенных по умолчанию свойства here, я заканчивал с добавлением

default_tags = Loofah::HTML5::WhiteList::ALLOWED_CSS_PROPERTIES.add('position') 

в application.rb, что позволило положению пройти через санитарию по умолчанию. Не уверен, насколько это безопасно.

0

У меня нет абсолютно никакого представления о том, что @Jim Hogan пытался сделать с его ответом. Я попробовал, и это не сработало. Поэтому я потратил немного времени, чтобы проанализировать все, и я нашел свой собственный ответ:

У нас есть помощник по имени sanitize_css от ActionController::Base.helpers.

Так почему бы не использовать его, извлекая необработанный стиль? Nokogiri входит в Rails> 4.

def patched_sanitize(html_tag_string) 
    sanitize html_tag_string, tags: %w(a b strong), attributes: manual_attributes 
    end 

    def manual_attributes 
    attributes = %w(href target align) 
    attributes << 'style' unless style_unsafe? 

    attributes 
    end 

    def style_unsafe? 
    ActionController::Base.helpers.sanitize_css(style_attributes_of(string)).empty? 
    end 

    def style_attributes_of(string) 
    Nokogiri::HTML(self.body).xpath('//body').children.map{|e| e.attr('style')}.join(' ') 
    end 

EDIT: Хорошо, я думаю, что я, наконец, понять, что ОП хотел сказать. И по какой-то причине он работает только в том случае, если я делаю то, что я делаю в этом ответе. Так что мой ответ дополняется, я думаю :)

Смежные вопросы