2013-05-07 32 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