加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 22:27:29 所属栏目:PHP教程 来源:网络整理
导读:我已经为我的自定义TYPO3扩展实现了CSRF保护(根据 documentation),它非常适用于未经过身份验证的前端访问者以及后端管理员.我注意到一个奇怪的事情是,如果非管理员后端用户尝试在前端插件中使用表单,则会抛出错误: PHP Catchable Fatal Error: Argument 1 p
我已经为我的自定义TYPO3扩展实现了CSRF保护(根据 documentation),它非常适用于未经过身份验证的前端访问者以及后端管理员.我注意到一个奇怪的事情是,如果非管理员后端用户尝试在前端插件中使用表单,则会抛出错误:

PHP Catchable Fatal Error: Argument 1 passed to TYPO3CMSCoreFormProtectionFormProtectionFactory::getMessageClosure() must be an instance of TYPO3CMSLangLanguageService,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读