2017-01-03 58 views
4

我實現了一個CSRF保護我的自定義TYPO3擴展名(根據documentation)和它的工作很好地用於非認證的前端遊客,也爲後臺管理員在前端。我注意到一個奇怪的是,拋出一個錯誤,如果一個非管理員後臺用戶試圖在前端插件使用的一種形式:TYPO3 Extbase:CSRF-FormProtection失敗的非管理員用戶在前端

PHP Catchable Fatal Error: Argument 1 passed to TYPO3\CMS\Core\FormProtection\FormProtectionFactory::getMessageClosure() must be an instance of TYPO3\CMS\Lang\LanguageService, null given 

我使用TYPO3五7.6.10和7.6.14測試。這兩個版本都會出現錯誤。

我看了一下FormProtectionFactory中的源代碼,似乎$GLOBALS['Lang']是爲FE中的管理員用戶初始化的,但是對於普通後端用戶來說是空的。在BE中,兩個用戶組都可以訪問其他受CSRF保護的表單。

按照LanguageService的official reference,該LanguageService通常只適用於爲:

此類通常實例爲全局變量$ GLOBALS [「LANG」]這只是在後端提供與在某些情況下在前端

有沒有人知道這些特定的情況是什麼?當然可以從BE註銷並作爲未經驗證的用戶訪問這些表單,但這顯然非常煩人。我認爲這是預期的行爲,但我不明白爲什麼這個問題只發生在非管理員身上。也許有人有一個想法,如何使表單可供FE中的非管理後端用戶使用?

任何幫助,高度讚賞。

謝謝!

爲了完整起見,我的CSRF令牌生成器的調用,但我認爲,「問題」是TYPO3本身(或者是預期的行爲):

$this->view->assign("csrfToken", FormProtectionFactory::get()->generateToken($this->extensionName, 
     $this->controllerContext->getRequest()->getControllerActionName(), $additionalObject)); 
+0

有趣的問題。我從7.6開始閱讀前端手動CSRF保護的一些內容,但所有文檔都只是在後端描述這一點。 –

+0

是的,這是正確的afaik。我通過查看FormProtectionFactory類來實現它(前端還有一個可用的前端實現),但是一個文檔將會很有用。 –

回答

相關問題