我正在使用TYPO3 9.5,并使用extbase构建搜索扩展,并且cHash出现了一些问题。
我使用f:form在流体中构建搜索表单,并使用GET作为方法。如果我使用POST就没有问题。
我的搜索操作被配置为不可缓存的操作。我还尝试为扩展名设置TypoScript配置requireCHashArgumentForActionArguments = 0
。
但是,每次尝试搜索时,都会得到一个404。即使当我让表单viewhelper生成cHash时,也是如此。唯一可行的解决方法是禁用LocalConfiguration中的pageNotFoundOnCHashError。但这对我来说是错的。
如果我创建带有固定搜索词的链接,该操作也将起作用。
所以我遇到了一些问题。
这也是一些示例代码
<f:form
id="search-form"
class="press-search-widget"
additionalAttributes="{'role': 'search'}"
method="get"
action="search"
extensionName="MySearch"
pluginName="Mysearch"
controller="Search"
section="search-form" >
<f:form.textfield
id="pressfilter-search"
class="form-control"
type="text"
name="searchTerms[searchTerm]"
value="{parameters.searchTerm}"
placeholder=""
/>
</f:form>
答案 0 :(得分:1)
cHash是一项安全功能。它可以防止操纵参数。服务器作为附加的安全层,还可以防止缓存膨胀攻击。 机器人可以在其中生成具有新参数和TYPO3的链接,然后缓存每个此类页面的结果,并快速增长数据库中的缓存表。
但是可以使用安装工具[FE][cHashExcludedParameters]
设置从该计算中排除某些参数。
那么排除的参数也不会影响缓存。 (页面将被缓存,就像没有参数一样),但是由于您具有不可缓存的操作,因此无论如何都必须即时生成结果。
答案 1 :(得分:0)
为什么需要针对不可执行的操作使用cHash?
我真的不知道。也许他们只是忘记了它,或者没有人真正使用GET表单。
cHash完全如何在表单上工作?这是用户可以修改值的形式的概念,据我了解,这是防止这种情况的追求的概念。
URL参数包含在chash中。因此,通过POST发送消息时,除了action / controller参数外,不应该使用chash。
您必须自己构建表单并手动验证或使用Javascript。 Indexed_search使用POST,更改隐藏表单字段中的页面/指针,然后再次提交该页面以进行分页。
答案 2 :(得分:0)
为什么要为不可执行的操作使用cHash?
在评估应提取哪个TypoScript之前先评估cHash,因此也不知道应该加载哪些(未缓存)缓存的插件,或者它们是否需要cHash评估(或将其禁用)。
cHash完全如何在表单上工作?这是用户可以修改值的形式的概念,据我了解,这是防止这种情况的追求的概念。
我不知道您使用HTTP GET提交表单的原因。但是,除排除的参数外,所有的GET参数都被考虑在内(请参见上面的响应)。
我强烈建议切换到HTTP POST-主要是因为HTTP标准要求不缓存POST参数(也不在浏览器中!),否则,访客A可以使用表单提交某些内容,而访客B可以看到访客A的结果POST用于数据提交,而GET实际上在HTTP中定义为“只读”模式。
TYPO3的两个选项是:
cHashExcludedParameters
选项来禁用表单中的所有用户输入值。