PHP:大文件上传的安全性(如“post_max_size”设置)?

问题描述 投票:0回答:2

在 PHP 中允许上传大文件时是否需要考虑任何安全和/或性能影响?例如,这些是我当前设置的 PHP ini 设置。

memory_limit = 950M
upload_max_filesize = 950M
post_max_size = 950M
max_execution_time = 0

这些设置可能会出现什么问题(如果有的话)?

php security file-upload configuration ini
2个回答
2
投票

更改这些设置不会改变安全考虑。然而,对于性能而言,以下内容是有效的:

以高效的方式服务用户的艺术是为用户的总体需求提供足够的资源。根据您的设置将其转换为示例将类似于:

10 个用户上传 950 MB 的数据需要您提供 9.5 GB 的带宽和 I/O 吞吐量(例如,受磁盘速度的影响)。作为用户,我可能可以忍受在 1 分钟内上传 950 MB,但如果我花了一个小时就会不满意。

100 个用户上传 950 MB 需要您提供 95 GB...

1000 个用户上传 950 MB 需要您提供 950 GB 的服务... ...

当然,并非所有用户都始终追求最大,甚至并发上传也可能受到限制。然而,这些最大设置会增加您的风险堆栈。因此,根据您的使用特征和您的资源填充,这些设置可能是有效的。

但是我假设您给出了极端的例子并想了解其含义。

当我用谷歌搜索“optimize php memory_limit”时,我得到这个: https://softwareengineering.stackexchange.com/questions/207935/benefits-of-setting-php-memory-limit-to-lower-value-for-specific-php-script

显然您可以对其他设置执行相同的操作。

在论坛中,您可以发现很多人反对将这些配置值设置得这么高。然而,在其他访问层上仔细管理资源利用率的环境中(例如,通过应用程序内权限限制上传用户的数量),在过去对我来说确实非常有效。


0
投票

更改

post_max_size
设置时需要考虑一些安全因素。

请参阅下面的示例和解决方案。

但是与其他答案中所说的不同, 您的服务器或客户端的带宽不需要增加, 至少如果它已经足够满足您的目标用户数量的话就不会。

示例(安全问题)

假设给定:

  • 服务器的存储容量是

    100 GB
    只是为了简单,否则这个数字将是Tera-Bytes之大。

  • 服务器的

    php.ini
    允许
    950M
    ,就像OP提到的那样。

  • 服务器的 PHP 脚本限制每个用户拥有 1 GB 的可用存储空间,并且一旦用户数量达到 90% 容量,计划购买更多存储空间。

时间:

  • 单个攻击者尝试上传 100 个文件,每个文件的大小为

    950 MB

  • 第一个文件已完成上传。

  • 哪一端/填充允许 1 GB。

然后:

  • 因为 PHP 脚本仅在整个文件发布(上传)后运行。

  • 剩余的99个文件将分别继续发布(上传), 这可能会导致服务器存储空间不足的问题。
  • 最后,如果服务器还没有因为存储空间不足问题而崩溃, 表示 PHP 脚本运行并检查 1 GB 限制, 因此删除新上传的文件。
  • 解决方案

默认的

8M

post_max_size
已经足够了, 实际上,也许可以将其降低到
3M

因为

,在上传完成之前检查post_max_size限制, 每当达到该限制时,您的 PHP 脚本就会立即运行, 这允许您的脚本处理限制错误。

因此

,不要增加post_max_size,而是尝试以下操作:


    使用
  • JavaScript

    (甚至

    WebAssembly
    )实现“块上传”。
    
    

    对于任何超出您
    post_max_size

    限制的事情。

    
    

  • 这允许 PHP 脚本取消操作而无需太多开销。
  • 因为每个块仅包含文件的
    8 MB

    3 MB
    左右。
    
    

  • 最后,甚至可能暂停用户的访问
  • 之后

    他们重试太多次。

注意

,较低的upload_max_filesize并不会带来相同的好处, 因为只有在整个文件完成上传后才会检查该限制。


基本上,可以像上面那样防止拒绝服务攻击。

另见:

Laravel-chunk-upload

© www.soinside.com 2019 - 2024. All rights reserved.