热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php–TYPO3Extbase:CSRFFormProtection在前端非管理员用户失败

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

我已经为我的自定义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


推荐阅读
author-avatar
浮夸诗人_219
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有