通过客户端验证直接进入S3

时间:2013-07-29 10:37:48

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

我们正在使用s3_file_field将视频直接上传到S3,我们正计划使用client side validations来确保上传符合我们的规模限制,但我担心黑客可能会能够关闭JS,并将500GB文件上传到S3存储桶。

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

黑客绕过客户端验证有多容易?这只是一个关闭JS的案例吗?如果我们在禁用JS时禁用上传表单会有帮助吗?

我们是否应该实施工作人员或观察员来扫描上传的视频,并在上传视频后的某个时间以及用户可以访问之前对其进行验证?

2 个答案:

答案 0 :(得分:2)

您可以在S3存储桶上放置任何最大文件上载大小限制。据我所知,没有任何AWS政策规定。

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

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

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

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

答案 1 :(得分:1)

客户端尺寸检查当然可以被覆盖。但是,无论何时直接进行s3上传,都会有一个策略文档(使用您的aws凭据签名),指定允许和不允许的内容。

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