2017-01-03 114 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类来实现它(前端还有一个可用的前端实现),但是一个文档将会很有用。 –

回答

相关问题