2013-05-07 26 views
1

如相应的PHP manual entry所述,如果上传超出post_max_size限制,PHP将清除$_POST$_FILES当post_max_size超出时CakePHP黑洞文件上传

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

+0

增加post_max_size – 2013-05-07 17:19:41

+0

@nathanhayfield,但这也是更多的解决方法,对吗? – 2013-05-07 17:21:02

+0

如果您的目标是上传较大的文件,则不是。 – 2013-05-07 17:22:44

回答

2

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

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

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

也许这就是利用别人。

0

一个可能的问题是您的upload.max_filesize在PHP.ini中太低。当它太低时我得到CSRF错误,当我发现($ this-> request-> data)时出现一个空数组;

提高合理限度已经解决了这个问题。

+0

好吧,但这不是一个完整的解决方案。假设我将限制设置为2 Gb。用户仍然可以继续尝试上传大于2 GB的文件(预留脚本执行时间限制设置等),这将再次触发黑屏。我知道这是假设,但我正在寻找一个明确的解决方案 - 并找到它(请参阅我自己的答案)。 – 2014-01-22 10:23:42