TYPO3 6.2.32+中Ext:form通过TypoScript获取GET变量及升级失效解决
解决TYPO3 6.2.32+版本中Ext:form无法通过TypoScript获取GET变量的问题
这个问题确实是因为TYPO3 6.2.32版本的安全修复(编号3719867,提交记录eaa56c9)导致的——官方为了防止EXT:form中的注入风险,限制了直接在表单字段的value.data中引用GET/POST请求参数。原来的写法会被安全机制拦截,所以无法生效。
下面给你两种可行的解决方案,都是符合新版本安全规范的:
方案一:使用userFunc安全获取GET变量
通过TYPO3核心工具类的方法来读取GET参数,这是官方推荐的安全方式:
20 = HIDDEN 20 { name = myVar value = TEXT value.userFunc = TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv value.userFunc.param = GET|myVar }
GeneralUtility::getIndpEnv方法会安全处理请求参数,避免注入风险,同时能正确获取到myVar的GET值并赋值给隐藏字段。
方案二:利用表单的preFill预填充机制
如果你的表单有多个字段需要从请求参数取值,这种方式会更简洁:
首先在表单的全局配置里设置预填充规则:
plugin.tx_form.settings.preFill { myVar.data = GP:myVar }
然后隐藏字段的配置可以简化为:
20 = HIDDEN 20 { name = myVar }
preFill机制会自动将同名的请求参数值填充到对应的表单字段中,而且这个过程经过了TYPO3的安全校验,不用担心安全问题。
补充说明
那个安全修复的核心逻辑是禁止表单字段直接通过data属性引用GP:、POST:这类请求变量,因为之前的实现没有做足够的过滤,攻击者可以构造恶意参数来执行恶意代码。所以现在必须通过安全封装的API(比如getIndpEnv)或者官方提供的预填充机制来实现这个需求。
内容的提问来源于stack exchange,提问作者klaks
相关产品推荐
相关产品推荐

