В моем приложении CMS я использую gsub для замены частей предоставленного пользователем HTML-шаблона (строки) динамическим кодом из приложения (например, комментарием от пользователя или содержимым страницы).Я обновляю Rails 2.3.5 до 2.3.12 в рамках подготовки к переходу на Rails 3 и установил гем rails_xss, чтобы попытаться отсортировать мои строки.
Интересно, есть ли способСтроки gsub в другую строку (шаблон), считая входящую строку небезопасной, а разделы шаблона - безопасными?
Я уже чувствую, что мне придется переосмыслить это и, возможно, разделить шаблон вокруг моегопроблемные области и вставьте мои динамические биты в промежуток, передавая все это в виде массива различных безопасных и небезопасных строк, которые будут отображаться.Звучит ли это как нормальный путь.
ОБНОВЛЕНИЕ
Вот пример того, что я сейчас делаю.Это в помощнике, который вызывается из макета.Тема взята из базы данных.Это просто строка с определенными комментариями HTML, которую мы хотим заменить фактическим содержанием:
final_theme.gsub!('<body>', '<body>' + (render '/user_bars/user_bar'))
final_theme.gsub!('</body>', (render '/theme/google_analytics') + '</body>') if SiteSetting.first.google_analytics_code.present?
final_theme.gsub!('<!--THEME_MetaTitle-->', (render '/theme/meta_title'))
final_theme.gsub!('<!--THEME_Breadcrumbs-->', (render '/theme/breadcrumbs'))
final_theme.gsub!('<!--THEME_Footer-->', (render '/theme/footer'))
final_theme.gsub!('<!--THEME_Body-->', (render '/theme/body'))
Это простые случаи, у меня также есть комментарии, в которых есть действительные параметры (например, чтобы указать, какмного уровней в глубину, чтобы нарисовать индексную полосу, которых может быть много на странице).Я использую скан, чтобы найти детали, а затем снова gsub, чтобы заменить комментарий фактическим кодом indexbar.
Я полностью открыт для любых рекомендаций по рефакторингу, так как это область моего кода, которая не удовлетворяет меняна всех.