2016-05-31 8 views
1

上のルビーを現時点では、私のコードは次のようになります。が作用-として-タグ付けできるオン、Railsの

@events = Event.tagged_with(params[:search_input]) 

しかし、このようなクエリは、SQL-注射可能としなければなりません避けてください。しかし

Model.where("login = ? AND password = ?", entered_user_name, entered_password).first 

、私は、ユーザー入力をサニタイズする方法を、知らない:

Rubyonrails.orgは、このような攻撃(http://guides.rubyonrails.org/security.html#sql-injection)例えば

、使用してquestionmarksを回避する方法、を教えてくれるこの宝石。

@events = Event.tagged_with("?", "%#{params[:search_input]}%") 

しかし、これは次のエラーにつながる:私は次のことを試してみました、この入力をサニタイズする方法、

TypeError (no implicit conversion of Symbol into String): 

任意のアイデア?前もって感謝します!

答えて

2

この場合、acts_as_taggable_onの宝石があなたの墨塗りを処理しています。あなたがする必要があるのは、あなたのparams値を宝石に渡すことだけです。これを試してみてください:

@events = Event.tagged_with(params[:search_input]) 

通常、あなたはActiveRecordのと直接対話するときにしようとしたアプローチを使用します。この場合、acts_as_taggable_onはクエリパラメータメカニズムを使用して内部的にすべての処理を実行しています。 gemへのインタフェースでは、エラーの原因となったパラメータ化も使用できません。

+0

私は宝石のレポで次の問題を発見しました:https://github.com/mbleigh/acts-as-taggable-on/issues/670あなたは同意しないのですか、それとも何か違うのですか? – Mauddev

+0

この問題はこの問題とは異なるようです。この質問は、SQL(ActiveRecord)で使用するためのサニタイズ方法について質問します。リンクした問題は、タグの解析が適切に行われるようにする方法を尋ねるもので、デフォルトのパーサーを使用することをお勧めします。これらは実際には異なる懸念事項です。 –

関連する問題