2011-02-27 64 views
2

我正在构建一个具有文件上传功能的Rails应用程序,只有经过身份验证的用户才能上传文件。文件上传表单位于仅限会员区域,但由于抓取上传URL并尝试从脚本发布数据非常容易,所以我担心未经身份验证的文件上载提交。确保上传将被拒绝,但只有在数据传输完成并且浪费了宝贵的带宽之后。如何在整个表单提交到我的服务器之前拒绝未经身份验证的文件上传?由于我无法使用脚本或CURL控制用户,因此需要某种服务器端解决方案。我很欣赏任何反馈。谢谢。如何在数据传输完成之前拒绝文件上传?

+0

也许有一个的before_filter确保需要登录上传文件? – Shreyas 2011-02-27 17:52:49

回答

0

这是在执行该操作之前,你可以做..时,执行的before_filter什么(upload_form_action被上传表单页面,upload_action在于临危文件

allowed_to_upload应的页面简单的伪代码被帮手/功能/等,返回真/假,如果是假的,它会呈现403未经授权,否则将只是吝啬。

before_filter :check_upload, :only => [:upload_form_action, :upload_action] 

protected 
    def check_upload 
    render :nothing, :status => 403 and return unless allowed_to_upload 
    end 
+0

我目前有一个类似的before_filter设置来检查用户是否登录。如果用户没有登录,那么它只是重定向用户。我试过你的代码,但是认证总是在文件完全上传后进行。想象一下,一个聪明的用户从html源代码(包括真实性令牌和所有)抓取表单并使用它来尝试上传文件(不包含包含认证信息的cookie)。认证before_filter会拒绝文件的进一步处理,因为用户没有登录但没有实际上传 – SimKo 2011-02-28 03:23:35

+0

问题在于Rails在完成(即上传完成时)之前不处理该请求。不过,我怀疑你可以发送1GB的上传请求到任何页面,你不能做太多的事情。我需要看看这个 – nvez 2011-02-28 18:08:37

+0

是的,我有一个暗示,这可能是这样的。真正需要的是在文件上传完成之前检查cookie,然后终止上传。我想知道是否有可能在全部完成之前处理这篇文章。 Cookies是在表单数据之前发送的,因此可能有机会检查帖子,看看在表单数据流式传输到服务器时是否存在带有认证数据的cookie。也许有一些Rack定制?我不知道在交付它之前,Web服务器是否缓冲了整个帖子。 – SimKo 2011-02-28 21:11:31

相关问题