私のCMSアプリケーションでは、gsubを使用して、ユーザーが指定したhtmlテンプレート(文字列)の一部をアプリケーションの動的コード(ユーザーからのコメントやページコンテンツなど)に置き換えています。Rails 3への移行に備えて、Rails 2.3.5から2.3.12にアップグレードし、rails_xss gemをインストールして、文字列を並べ替えようとしています。
文字列を別の文字列(テンプレート)に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'))
これらは単純なケースであり、実際のパラメータを含むコメントもあります(たとえば、インデックスバーを描画するための深さのレベルを指定しますが、ページには多くのレベルがある可能性があります)。scanを使用して詳細を検索し、gsubを再度使用してコメントを実際のインデックスバーコードに置き換えます。
これは私のコードの領域であり、私をまったく満足させないので、私はリファクタリングのアドバイスを完全に受け入れています。