【发布时间】:2017-08-02 18:52:57
【问题描述】:
我已经阅读了一些帖子,例如Value whitelist using strong parameters in Rails 4,但这并不是我所需要的。
我有一个控制器,它接受一个 ID 并加载一个模型。它还可以选择接受一个查询字符串参数 (style),它可以是三个值之一,small、medium 或 large。这被传递给模型上的一个方法,该方法使用它来获取附加图像(使用回形针)。我注意到如果我传递了一个无效的参数(例如style=wibble),那么我会收到一个 400 错误并通知内部文件路径不存在。 Brakeman 还指出这是一个安全问题...
def show
style = params[:style] || :medium
thing = Model.find(params[:id])
path = "#{Rails.root}/public#{thing.image_url(style)}"
content_type = thing.image.content_type || 'image/png'
send_file path, type: content_type, disposition: 'inline'
end
我们在其他地方使用ActionController Parameters 效果很好;但我看不出如何将参数选项“列入白名单”?我所见过的所有地方都说要使用模型验证器,但这是假设我正在提交一个参数来更新模型,而我不是。
我知道我可以这样做:
return head :not_found unless %w(small medium large).include? style
这是最好的方法吗?
【问题讨论】:
标签: ruby-on-rails ruby validation security controllers