微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – TYPO3 Extbase:CSRF-FormProtection在前端非管理员用户失败

我已经为我的自定义TYPO3扩展实现了CSRF保护(根据 documentation),它非常适用于未经过身份验证的前端访问者以及后端管理员.我注意到一个奇怪的事情是,如果非管理员后端用户尝试在前端插件中使用表单,则会抛出错误

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 V. 7.6.10和7.6.14测试.两个版本都会发生错误.

我看了一下FormProtectionFactory中的源代码,似乎$GLOBALS [‘Lang’]在FE中为admin用户初始化,但对于普通的后端用户来说是空的.在BE中,两个用户组都可以访问其他CSRF保护表单.

根据LanguageService的official reference,LanguageService通常仅在BE中可用:

This class is normally instantiated as the global variable $GLOBALS[‘LANG’] It’s only available in the backend and under certain circumstances in the frontend

有谁知道这些特定情况是什么?当然可以从BE注销并以未经身份验证的用户身份访问表单,但这显然非常烦人.我认为这是预期的行为,但我不明白为什么这个问题只发生在非管理员身上.也许有人有一个想法,如何使表格也可用于富裕的非管理员后端用户

任何帮助都非常感谢.

谢谢!

为了完整起见,我调用了CSRF令牌生成器,但我认为’问题’在TYPO3本身(或者是预期的行为):

$this->view->assign("csrftoken",FormProtectionFactory::get()->generatetoken($this->extensionName,$this->controllerContext->getRequest()->getControllerActionName(),$additionalObject));

解决方法

TYPO3开发人员认为CSRF仅适用于已登录用户,而这种情况并非如此,因此匿名用户的前端根本无法使用CSRF功能.

https://forge.typo3.org/issues/77403

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐