2

如相应的PHP 手册条目$_POST中所述,$_FILES如果上传超出post_max_size限制,PHP 将清除。

我有一个类似下面的表单,并且我正在使用该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解决方案 - 它只会增加触发黑洞所需的文件大小,但不能解决核心问题。

4

2 回答 2

2

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

我将以下内容添加到我的AppController::beforeFilter()

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

也许这对其他人有用。

于 2013-05-07T17:22:40.693 回答
0

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

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

于 2014-01-21T19:42:28.053 回答