当超过post_max_size时,CakePHP blackholes文件上传

时间:2013-05-07 17:17:34

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

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

我有一个如下表单,我正在使用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解决方案 - 它只会增加触发黑洞所需的文件大小,但无法解决核心问题。 / p>

2 个答案:

答案 0 :(得分:2)

好的,我自己找到了解决方案。

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

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

也许这对其他人有用。

答案 1 :(得分:0)

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

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