私は現在フロントエンドのTinyMCEからいくつかのhtmlをキャプチャしているコントローラを持っています。もし私が火かき棒をつけているなら、スクリプトタグを提出し、警告メッセージなどを画面に注入することが可能です。ruby on railのフィールドをきれいにする方法
編集:現在、私はサニタイズヘルパーを使用してモデルでこれを固定しています:
require 'action_view'
class NotesController < AuthApplicationController
include ActionView::Helpers::SanitizeHelper
...
def update
params[:note][:content] = sanitize(params[:note][:content],
:tags => %w(a object p param h1 h2 h3 h4 h5 h6 br hr ul li img),
:attributes => %w(href name src type value width height data));
@note.update_attributes(params[:note])
これは、コントローラに汚い感じています。より良い方法がありますか?私。どういうわけかこのActiveRecordを統合するので、検証と同様の方法で保存する前にこれを他のフィールドに簡単に指定できますか?
ありがとうございます。
編集:
ここで少し進歩しています。私は
module SanitizeUtilities
def sanitize_tiny_mce(field)
ActionController::Base.helpers.sanitize(field,
:tags => %w(a b i strong em p param h1 h2 h3 h4 h5 h6 br hr ul li img),
:attributes => %w(href name src type value width height data));
end
end
を持っている私の/ Libsの下で
はその後、私のモデルでコードが
class MyModel < ActiveRecord::Base
include ::SanitizeUtilities
...
before_save :sanitize_content
...
def sanitize_content
self.content = sanitize_tiny_mce(self.content)
end
end
に崩壊これはあまり大騒ぎせず、不要なマークアップを取り除くように思われます。
かなり新しくレールに新しく神経質なことがあるかもしれません。誰もがここに潜在的な欠点を見ることができますか?
おかげで再び
これをレールで処理するもっと一般的な方法は、クライアントから古いクラップスを受け入れて保存することです(安全にSQLインジェクションを避けるよう注意してください)。その後、表示する時間が来たら、そこで浄化してください。 – noodl
それは私には奇妙に思えます。なぜ汚いデータをコミットしたいのですか?それは、私が複数の場所でデータを読み返すと、作業と機密性を失う可能性が増します。 – Chris
@noodlこれにChrisと合意しました。データを前面から取り除くということは、このプロセスを一度行うだけで済むということです。それを取り除くことは、データを表示するたびにこのプロセスが発生しなければならないことを意味します。そして、クリスが言ったように、あなたは視界を守ることを忘れるかもしれません。 – iwasrobbed