如相应的PHP manual entry所述,如果上传超过$_POST
限制,PHP将清除$_FILES
和post_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>
答案 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)时,我得到一个空数组;
将限制提升到合理的范围已经为我解决了这个问题。