如何为 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 的接口不允许您也使用参数化,这是导致错误的原因。
目前,我的代码如下所示:
@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 的接口不允许您也使用参数化,这是导致错误的原因。