【问题标题】:Direct to S3 with client-side validations通过客户端验证直接到 S3
【发布时间】:2013-07-29 10:37:47
【问题描述】:

我们正在使用s3_file_field 将视频直接上传到S3,我们计划使用client side validations 以确保上传在我们的大小限制内,但我担心黑客可能会转为JS关闭,然后将 500GB 的文件上传到我们的 S3 存储桶。

过去,每当我使用客户端验证时,我也有服务器端验证支持它们,所以我从来没有太担心用户关闭 JS,但我们不能此处是服务器端验证,因为我们将直接进入 S3。

黑客绕过客户端验证有多容易?只是关闭JS的情况吗?如果在禁用 JS 的情况下禁用上传表单会有所帮助吗?

我们是否应该实施工作人员或观察员来扫描上传的视频,并在上传后的某个时间对它们进行验证,然后才能被用户访问?

【问题讨论】:

  • AFAIK 用户应该拥有用于文件上传的公钥和私钥。因此,如果您将其提供给用户,他只需打开 javascript,复制密钥并上传他想要的内容,而无需任何验证。

标签: ruby-on-rails client-side-validation


【解决方案1】:

S3 存储桶本身没有任何最大文件上传大小限制。据我所知,没有任何 AWS 政策规定。

但是 S3 支持 CORS,这是 s3_file_field 用来使这种直接上传工作的。如果 S3 支持 CORS 的 content-length-range 策略元素,您可以添加它,然后可能会被覆盖。

另外,s3_file_field 实际上是jQuery File Upload 的扩展,它有多种验证选项,包括max_file_sizedocumented here。在s3_file_field 中,默认max_file_size 是500 MB,它显示为you can override it

无论哪种方式,如果用户禁用了 javascript,那么他们将无法运行 JQuery File Upload,这意味着他们根本无法通过 CORS 上传任何内容。

只需确保在生产中指定 AllowedOrigin,如 s3_file_field 文档中所述。

【讨论】:

    【解决方案2】:

    客户端大小检查当然可以被覆盖。但是,每当您直接上传到 s3 时,都会有一个策略文档(使用您的 aws 凭证签名)指定允许和不允许的内容。

    特别是您可以设置文件大小的限制。看起来 s3_file_field 设置正确,因此即使有人绕过客户端检查,s3 也会拒绝上传,因为它不符合政策。

    【讨论】:

    • 谢谢,知道我们已被政策文件所涵盖,真是如释重负。
    猜你喜欢
    • 2013-07-10
    • 2014-08-30
    • 1970-01-01
    • 2015-11-10
    • 2015-04-10
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    相关资源
    最近更新 更多