Rails :: HTML Sanitizer: имитировать конфигурацию CConfredOredConContent, указав атрибуты и классы CSS для каждого тега - PullRequest
0 голосов
/ 09 января 2019

Допустим, я хочу очистить сгенерированный пользователем HTML, написанный CKEDITOR или что-то подобное.

CKEDITOR имеет действительно хороший хеш-подобный синтаксис для разрешения контента:

config.allowedContent = {
    a: {
      attributes: 'href'
    },
    b: true,
    i: true,
    u: true,
    table: true,
    tbody: true,
    tr: true,
    td: true,
    blockquote: true,
    img: {
      attributes: [ '!src', 'alt', 'width', 'height' ],
      classes: [ 'align-left', 'align-center', 'align-right' ],
    },
    h1: true,
    h2: true,
    h3: true,
    ul: true,
    li: true,
    ol: true,
    figure: true,
    figcaption: true,
  };

Работает так:

  • разрешены только теги в списке;
  • если значение тега равно true, все атрибуты и классы разрешены для этого тега html; в противном случае вы можете передать объект, указывающий, какие классы и атрибуты вы хотите разрешить для этого конкретного тега.

Я хочу воспроизвести это в бэкэнде с Rails HTML Sanitizer.

В настоящее время у меня есть простой PermitScrubber:

class BlogPostScrubber < Rails::Html::PermitScrubber

  def initialize

    super

    self.tags = %w(
      p
      a
      b
      i
      u
      table
      tbody
      tr
      td
      blockquote
      img
      h1
      h2
      h3
      ul
      li
      ol
      figure
      figcaption
    )

  end

end

Проблема заключается в следующем: если я укажу @attributes в PermitScrubber, он разрешит эти атрибуты для любого элемента; Кроме того, я не знаю, как разрешить только определенные классы CSS для определенных тегов.

Может кто-нибудь пролить свет на способ достижения этого?

...