2016-05-31 37 views
1

此刻,我的代碼看起來是這樣的:如何消毒的寶石用戶輸入行爲-AS-加標籤上,Ruby on Rails的

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

但是這樣的查詢允許SQL-注射和應避免。

Rubyonrails.org告訴我們,如何避免這種攻擊(http://guides.rubyonrails.org/security.html#sql-injection

例如,使用questionmarks:

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

不過,我不知道,如何消毒用戶輸入這顆寶石。我試過如下:

@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)。您鏈接的問題詢問如何確保解析標籤正確地出現,並且給出的建議是使用默認解析器。這些真的是不同的擔憂。 –