Рельсы Sanitize: безопасность + возможность встраивания - PullRequest
5 голосов
/ 25 февраля 2010

Мы создаем пользовательский контент-сайт, на котором мы хотим, чтобы пользователи могли встраивать такие вещи, как видео, слайды и т. Д. Кто-нибудь может порекомендовать общепринятый список тегов / атрибутов, чтобы разрешить в rails санировать это обеспечит нам довольно хорошую безопасность, но в то же время разрешит большое количество встраиваемого содержимого / форматирования html?

Ответы [ 3 ]

0 голосов
/ 26 февраля 2010

Честно говоря, разрешение пользователям использовать WYSIWYG Html-редакторы может звучать хорошо, но на практике это не очень хорошо работает как для пользователей, так и для разработчиков. Причины:

  • Все еще слишком различное поведение в разных браузерах.
  • Белый список позволяет защитить сайт, но в итоге пользователи будут звонить и просить разрешить другой параметр для тега OBJECT или аналогичного. Черные списки просто не защищены.
  • Не многие пользователи знают, что такое HTML-тег.
  • Пользователям сложно форматировать текст (как вы можете сказать им, чтобы они использовали заголовок вместо BOLD + FONT-SIZE).
  • Как правило, это довольно болезненно, и вы не можете реально изменить дизайн сайта, если это необходимо, поскольку пользователи неправильно используют HTML.

Если бы я сейчас делал CMS-подобную систему, я бы, вероятно, пошел с семантической разметкой.
Большинство пользователей быстро привыкают к этому, и это просто текст (как здесь, в SO).

Также вы можете генерировать правильный HTML и поддерживать необходимые теги.
Например, если вам нужно встроить картинку, вы можете написать что-то вроде:

Мое лицо: изображение- http://here.there/bla.gif

Что бы сгенерировать для вас HTML следующим образом:

<a class='image-link' title='My Face' href='http://here.there/bla.gif'>
  <img alt='My Face' src='http://here.there/bla.gif' />
</a>

Существует множество языков разметки, поэтому просто выберите тот, который вам больше подходит, и добавьте свои собственные модификации.

Например, GitHub использует модифицированный markdown, а код для его анализа - это просто пара строк.

Одним из недостатков является то, что пользователям необходимо изучать язык, и это НЕ WYSIWYG.

С уважением,
Дмитрий.

0 голосов
/ 28 ноября 2010

Для этого есть отличный проект. Он даже имеет встроенный анализ, чтобы разрешить только встраивание на YouTube, например

https://github.com/rgrove/sanitize

0 голосов
/ 26 февраля 2010

Пока он выключен, вы должны иметь возможность разрешать объекты. Возможно, вам даже удастся определить действительные допустимые параметры тегов объекта, чтобы разрешить только белый список, а дополнительные объекты не могут быть включены.

Однако может быть лучше обеспечить некоторую поддержку пользовательского интерфейса для встраивания. Например, я запрашиваю у пользователя URL-адрес YouTube, а затем извлекаю из него код для встраивания видео.

Несколько преимуществ: - код YouTube по умолчанию не соответствует стандартам, поэтому я могу создать свой собственный объектный код - У меня есть полный контроль над тем, как встроенные элементы включаются в страницу вывода

...