如何为 gem acts-as-taggable-on,Ruby on Rails 清理用户输入

How to sanitize user input for the gem acts-as-taggable-on, Ruby on Rails

目前,我的代码如下所示:

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

但是这样的查询允许 SQL-注入,应该避免。

Rubyonrails.org告诉我们,如何避免此类攻击(http://guides.rubyonrails.org/security.html#sql-injection)

例如,使用问号:

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

但是,我不知道如何为此 gem 清理用户输入。我尝试了以下方法:

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

但这会导致以下错误:

TypeError (no implicit conversion of Symbol into String):

任何想法,如何清理这个输入?提前致谢!

在这种情况下,acts_as_taggable_on gem 正在为您处理清理工作。您需要做的就是将您的 params 值传递给 gem。试试这个:

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

通常,您会使用与 ActiveRecord 直接交互时所尝试的方法。在这种情况下,acts_as_taggable_on 正在使用查询参数机制在内部为您完成所有这些工作。 gem 的接口不允许您也使用参数化,这是导致错误的原因。