【问题标题】:Limit total p:fileUpload temporary files size限制总 p:fileUpload 临时文件大小
【发布时间】:2014-12-26 13:03:24
【问题描述】:

我在“本机”模式下使用<p:fileUpload> 组件将文件上传到我的站点。 <p:fileUpload>allows 限制文件数量和每个文件的大小,但我找不到限制所有页面的总文件大小的方法。

这是困扰我的情况。攻击者可以从同一页面的多个实例启动许多非常慢的上传。这样他就可以根据需要使用尽可能多的空间,即使限制设置为一个 1MiB 文件。这可能会干扰其他服务。

我怎样才能避免这种情况?

【问题讨论】:

    标签: jsf file-upload jsf-2 primefaces


    【解决方案1】:

    第一个解决方案是验证码,只需在开始上传之前进行验证码验证。 Primefaces 已准备好使用组件:http://www.primefaces.org/showcase/ui/misc/captcha.xhtml

    第二种解决方案是在支持 bean 中执行验证。考虑到您有@SessionScope bean,您可以在其中定义参数并在其中写入上传数据的总大小。每次当您的用户上传您在其中写入的内容时,并在每次上传之前检查用户是否超过了允许的日期。

    【讨论】:

    • Captcha 是个好主意,但攻击仍然是可能的,只要攻击者能够负担得起足够的解决方案(并且有服务可以以相对较低的价格做到这一点)。使用支持 bean 似乎是一种解决方案,但我找不到一种方法来检测上传已开始,只是上传已完成的事实。
    • 更准确地说-有一个onstart回调,但它在客户端,因此可以轻松修改。