2017-10-23 8 views
0

私はいくつかの入力パラメータを持っています。私はサニタイザを使用するようにXSS攻撃を防ぎたいと思っています。 JavaScriptタグを使用してデータを保存しないようにするには、サニタイザを使用する方法が2つあります。以下のような消毒各個々のparam使用するためのすべてのアクションにおいて
1)ルビで一度入力したすべてのユーザーをサニタイズする方法はありますか?

Book.create(title: ActionController::Base.helpers.sanitize(params[:object][:title]) 

2)ように作成し、モデル内の更新に関数を定義する:

before_validation :sanitize_title,:on => [:create,:update] 
def sanitize_title 
    self.title = ActionController::Base.helpers.sanitize(self.title) 
end 

しかし問題されていますこれらの機能が増加すると、列とパラメータが増加し、応答速度に影響する可能性があると考えました。すべてのパラメータを一緒に浄化する方法はありますか?

答えて

0

データを手作業で消毒する必要はありません。ビューレイヤーでは、Railsがそれを行います(あまりにもあなたはrawを使用していません)。

あなたがそれを行う方法が明白なdownfallsのトンを持っています

  • あなたが編集プロンプトを表示した場合、それはつもり
  • 再消毒することですあなたがタイトルを更新せずにモデルを更新するたびに、タイトル再浄化されます。

これは目的を果たさない。

のように理にかなって唯一のことは、消毒があなたのボトルネックだった場合は、サーバーのリソースを節約するために、あなたの入力の前の消毒バージョンを保存していたである:これは作る唯一のバージョンである

before_save :update_sanitized_versions 
def update_sanitized_versions 
    self.sanitized_title = ActionController::Base.helpers.sanitize(self.title) 
end 

センス。次に、ビューでは<%= raw model.sanitized_title %>を使用します。

が最も確実サニタイズアプリのボトルネックではないので、私は、それを行うことはお勧めしません

+0

私はjsタグを含んでいるかどうかに関わらずデータを保存していますが、私の応答(jbuilder)ではデータを扱うかどうかはデータを保存することを意味しますか? –

+0

それは、どんな技術でも、ジェンソンを衛生的にすることになっています。正当な理由がない限り、HTMLはJSON形式で送信する必要があります。 – Ven

+0

申し訳ありませんが、私はあなたが意味するものを得ませんでした。あなたは、それが何であるかを見て、パラメを保持しなければならないということですか? –

関連する問題