Является ли html_safe хорошей практикой при хранении ссылок для встраивания видео в текстовом формате

#ruby-on-rails #ruby-on-rails-3 #embed

#ruby-on-rails #ruby-on-rails-3 #Внедрить

Вопрос:

Мое приложение позволяет пользователям встраивать видео с популярных сайтов, таких как YouTube и т.д. У меня есть text_area_field для принятия кода встраивания в виде строки и сохранения в базе данных. Я выполняю некоторую базовую проверку с помощью регулярного выражения для фильтрации определенных частей кода для встраивания. Пример кода для встраивания с YouTube:

 <iframe width="560" height="315" src="http://www.youtube.com/embed/INx7B2yyD0g" frameborder="0" allowfullscreen></iframe>
  

Когда я показываю видео обратно пользователю, я делаю это, на мой взгляд

<%= user.content.html_safe %>

Что я хотел бы знать, так это следующее:
1. Безопасно ли вызывать html_safe для данных, отправленных пользователем, какие еще варианты у меня есть
2. Является ли хранение кода встраивания в виде строки хорошей практикой
3. Есть ли какие-либо лазейки для пользователей, чтобы отправлять плохие сценарии
4. Что можно сделать по-другому, чтобы предотвратить такие атаки
спасибо

Ответ №1:

Вы могли бы пойти по пути использования чего-то вроде sanitize gem с пользовательским белым списком. Но поскольку ему пришлось бы принимать такие вещи, как <iframes> это может быть сложно.

Вероятно, самым безопасным вариантом было бы использовать анализатор HTML, такой как nokogiri, для анализа конкретных необходимых значений и вставки их в свой собственный шаблон для каждого сервиса.

Для вашего примера кода для встраивания:

 <iframe width="560" height="315" src="http://www.youtube.com/embed/INx7B2yyD0g" frameborder="0" allowfullscreen></iframe>
  

Вам просто нужно захватить что-то вроде:

 {:with => 560, :height => 315, :youtube_id => 'INx7B2yyD0g'}
  

Это определенно больше работы, поскольку вам понадобятся разные анализаторы и шаблоны для каждого поддерживаемого вами видеосервиса. Но это самый безопасный способ, который я могу придумать, чтобы избежать вредоносного внедрения HTML.

Комментарии:

1. спасибо, я думал в духе nokogiri, но подумал, что может быть другой способ.