Является ли html_safe хорошей практикой при хранении ссылок для вставки видео в текстовом формате - PullRequest
0 голосов
/ 18 октября 2011

Мое приложение позволяет пользователям вставлять видео с популярных сайтов, таких как YouTube и т. Д. У меня есть поле text_area_, чтобы принять код для вставки в виде строки и сохранить в базе данных.Я делаю некоторую базовую проверку с помощью регулярного выражения для фильтрации определенных частей кода встраивания.Пример кода для вставки из 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 Ответ

0 голосов
/ 18 октября 2011

Вы можете пойти по пути использования чего-то вроде 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.

...