Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typo3 如何在get表格上处理裂缝?_Typo3_Extbase_Typo3 9.x - Fatal编程技术网

Typo3 如何在get表格上处理裂缝?

Typo3 如何在get表格上处理裂缝?,typo3,extbase,typo3-9.x,Typo3,Extbase,Typo3 9.x,我正在使用TYPO3 9.5并使用extbase构建搜索扩展,但在cHash方面存在一些问题。 我用f:form在fluid中构建搜索表单,并使用GET作为方法。如果我使用POST,没有问题。 我的搜索操作配置为不可缓存操作。我还尝试为我的扩展设置打字脚本configrequireCHashArgumentForActionArguments=0。 但每次我尝试搜索时,都会得到404。即使我让表单viewhelper生成一个裂缝。唯一有效的解决方法是在LocalConfiguration中禁用p

我正在使用TYPO3 9.5并使用extbase构建搜索扩展,但在cHash方面存在一些问题。
我用f:form在fluid中构建搜索表单,并使用GET作为方法。如果我使用POST,没有问题。
我的搜索操作配置为不可缓存操作。我还尝试为我的扩展设置打字脚本config
requireCHashArgumentForActionArguments=0
。 但每次我尝试搜索时,都会得到404。即使我让表单viewhelper生成一个裂缝。唯一有效的解决方法是在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>

为什么需要为不可缓存的操作设置缺口

我真的不知道。也许他们只是忘记了,或者没有人真正使用GET表单

裂缝怎么能在表格上工作呢?这是一个表单的概念,用户可以修改值,据我所知,这是一个裂缝的概念来防止这种情况

URL参数包含在chash中。因此,除了动作/控制器参数外,通过POST发送不应使用chash


您必须自己构建表单并手动或使用Javascript进行验证。索引搜索使用POST,更改隐藏表单字段中的页面/指针,并再次提交表单进行分页。

cHash是一种安全功能。它可以防止参数的复制。而服务器作为额外的安全层,它还可以防止缓存膨胀攻击。 其中,机器人可以生成带有新参数和类型的链接3,然后缓存每个此类页面的结果,并快速增长数据库中的缓存表

但是,可以使用安装工具从计算中排除某些参数:
[FE][cHashExcludedParameters]
设置

排除的参数也不会影响缓存。(页面被缓存,就好像参数不存在一样),但由于您有一个不可缓存的操作,您的结果必须在运行中生成

为什么需要一个不可缓存的操作的缺口

cHash是在知道应该获取哪个打字脚本之前进行评估的,因此也不知道应该加载哪些(未)缓存的插件,或者它们是否需要cHash评估(或者禁用它)

裂缝怎么能在表格上工作呢?这是一个表单的概念,用户可以修改值,据我所知,这是一个裂缝的概念来防止这种情况

我不知道您使用带有HTTP GET的表单提交的原因。但是,除排除的参数外,所有GET参数都被考虑在内(请参见上面的响应)

我强烈建议切换到HTTP POST-主要是因为HTTP标准要求POST参数不能被缓存(也不能在浏览器中!),否则访问者A可以使用表单提交某些内容,而访问者B可以看到访问者A的结果。POST用于数据提交,GET实际上在HTTP中定义为“只读”模式

类型3的两个选项是:

  • 如果您的用例中没有100%的GET必要性,请切换到POST
  • 使用TYPO3中的
    cHashExcludedParameters
    选项禁用表单中的所有用户输入值

我使用GET,因为它只是一个搜索。搜索相同单词的每个用户都会得到相同的结果页。允许浏览器进行缓存。