0

我正在构建一个 Rails Web 应用程序,用户可以在其中将图像从浏览器上传到云端。我想得有点超前,并希望防止用户使用正在传递的参数,以免在可能的页面(空图像)中出现不良输出。

在我看来,我有 cloudinary 上传器的代码:

<%= form_tag(some_path, :method => :post) do  %>
 <%= cl_image_upload_tag(:image_id) %>
 ...
<% end %>

现在,当用户上传图像时,它直接进入 cloudinary,并且该过程返回:image_id。当用户接受图像时,我会在控制器中收到它,如下所示:

if params[:image_id].present?
  preloaded = Cloudinary::PreloadedFile.new(params[:image_id])         
  raise "Invalid upload signature" if !preloaded.valid?
 @model.image_id = preloaded.identifier
end

该图像 ID 保存在我的数据库中以供将来检索。

现在,如果用户使用诸​​如“curl”之类的工具,或者任何其他允许他在将返回的 :image_id 提交给控制器之前修改它的方法怎么办?当我尝试在我的页面中显示它时,我的数据库中将有一个很难找到的错误值和一个空图像。避免这种情况的最佳方法是什么?

问候,

4

1 回答 1

0

使用 时cl_image_upload_tag, 的值params[:image_id]将包含一个签名。签名由PreloadedFile#valid?您可以确定地验证public_id并由versionCloudinary 返回。如果需要,您还可以验证版本(unix 时间戳)是相当新的。

于 2014-06-09T16:39:26.203 回答