0

编辑:@Wolffc 的答案是完全正确的——我的返回值是错误的,所以问题出在椅子和屏幕之间。

TYPO3 10.4.8

我正在使用 <f:link.action> 在邮件中生成一个链接,以验证对课程的订阅。

它不能被缓存,所以我可以检查链接是否已经被点击,但是链接中添加了一个 cHash。

<f:link.action
    action="validate"
    pluginName="Coursevalidation"
    extensionName="myextension"
    controller="Course"
    pageUid="1"
    absolute="1"
    pageType="1921"
    noCache="1"
    noCacheHash="1"
    arguments="{validationHash: subscription.validationHash, course:course, subscription:subscription}"
>Link</f:link.action>

文档说不应该使用 noCache 和 noCacheHash (“你不应该需要这个”),如果我添加它没有区别。

PageType 未缓存,1921.config.no_cache = 1

生成的链接导致(换行符以获得更好的可读性):

https://mydomain.ddev.site/email-validation
?no_cache=1
&tx_myextension_coursevalidation%5Baction%5D=validate
&tx_myextension_coursevalidation%5Bcontroller%5D=Course
&tx_myextension_coursevalidation%5Bcourse%5D=3
&tx_myextension_coursevalidation%5Bsubscription%5D=30
&tx_myextension_coursevalidation%5BvalidationHash%5D=40e83[...thats long ;)...]0d65c
&cHash=5d7688ac4f04a2d31a98f2cffb792e51

如您所见,有一个 cHash。首先点击链接会触发我的机制来检查所有内容并将订阅设置为有效,然后重定向到“成功”页面,它应该做什么。

第二次点击也会打开成功页面,但应该有“已经验证”的消息。当我调用没有 cHash 的链接时,该页面已打开。

为什么要添加 cHash,如何删除?

谢谢 :)

4

1 回答 1

2

您必须在 ext_localconf.php 中将此操作定义为未缓存

TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin

如果插件操作未缓存,则typo3 将正确处理。

cHash 是对请求参数的校验和,主要用于防止缓存膨胀攻击。如果攻击者生成随机参数集。如果 cHash 无效。结果不会被缓存。但反过来是不正确的。如果 cHash 有效,它可能仍然是页面的部分未缓存。(甚至整页)

于 2020-09-26T20:09:57.117 回答