如何清理用于Searchlogic的表单参数?

示例表格

 


  • 3 %> 3 %>

调节器

 # app/controllers/products_controller.rb class ProductsController < ApplicationController def index @search = Product.search(params[:search]) @products = @search.all end end 

在这种情况下消毒params的最佳方法是什么? 用户可以轻松修改HTML或GET请求字符串,以尝试访问他们无权访问的其他数据。

AFAIK,Searchlogic不支持开箱即用的任何类型的可搜索范围的白名单。 最简单的方法是编写一个方法来删除任何未明确授权的哈希键:

 class Hash def sanitize_keys!(*allowed) self.each do |key, value| self.delete(key) unless allowed.include? key end end end # in your controller... params[:search].andand.sanitize_keys!(:in_stock, :price_gte) # etc... 

不是很好,但也不差,它肯定会完成工作。 在使用meta_search的Rails 3中,您可以将范围列入白名单以便在模型级别进行搜索,这是一种优越的方法。 您可以扩展Searchlogic以实现相同的function。

看一下meta_search – 特别是attr_searchable和assoc_searchable方法。 这(几乎)是Searchlogic的直接替代品,它也适用于Rails 3。