【问题标题】:CakePHP blackholes file uploads when post_max_size is exceeded超过 post_max_size 时 CakePHP 黑洞文件上传
【发布时间】:2014-06-23 17:25:40
【问题描述】:

如相应的PHP manual entry 中所述,如果上传超过post_max_size 限制,PHP 将清除$_POST$_FILES

我有一个类似下面的表单,我正在使用Security 组件:

echo $this->Form->create(false, array('type' => 'file', 'action' => '...'));
echo $this->Form->file('documentFile');
echo $this->Form->end('Upload');

现在,当我上传超过上述限制的大文件时,由于 CSRF 验证失败,我得到“请求已被黑洞” - 这并不奇怪,因为 PHP 清除 $_POST 也会删除 CSRF 保护令牌。

我可以使用Security->unlockedActions 来解决这个问题,但这似乎并不理想(而且我将失去 CSRF 保护)。有什么办法可以防止这种情况下的黑洞?

编辑:我不认为增加 post_max_size 是一种解决方案 - 它只会增加触发黑洞所需的文件大小,但不能解决核心问题。

【问题讨论】:

  • 增加 post_max_size
  • @nathanhayfield 但这也是一种解决方法,对吧?
  • 如果您的目标是上传更大的文件,则不会。
  • 哦,对了,也许应该澄清一下。我的目标是向用户显示有意义的错误消息,而不是黑洞。

标签: php file-upload cakephp-2.3 csrf-protection


【解决方案1】:

好的,我自己找到了解决办法。

我在AppController::beforeFilter() 中添加了以下内容:

if (
   ($this->request->isPost() || $this->request->isPut()) &&
   empty($_POST) && empty($_FILES)
) {
    $this->Security->csrfCheck = false;
}

也许这对其他人有用。

【讨论】:

    【解决方案2】:

    一个可能的问题是 PHP.ini 中的 upload_max_filesize 太小。当我 pr($this->request->data); 太低和空数组时,我得到 CSRF 错误

    将限制提高到合理的值已经为我解决了这个问题。

    【讨论】:

    • 嗯,但这不是一个完整的解决方案。假设我将限制设置为 2 Gb。用户仍然可以继续尝试上传 > 2 Gb 的文件(抛开脚本执行时间限制设置等),这将再次触发黑洞。我知道这是相当假设的,但我一直在寻找一个明确的解决方案 - 并找到了它(见我自己的答案)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多