Как обработать cHash в форме get? - PullRequest
0 голосов
/ 27 июня 2019

Я использую TYPO3 9.5 и создаю расширение для поиска с помощью extbase, и у меня возникли некоторые проблемы с cHash.
Я строю свою форму поиска в жидкости с f: form и использую GET как метод. Нет проблем, если я использую POST.
Мое поисковое действие настроено как не кэшируемое действие. Я также попытался установить конфигурацию TypoScript requireCHashArgumentForActionArguments = 0 для моего расширения. Но каждый раз, когда я пытаюсь выполнить поиск, я получаю 404. Даже когда я позволяю виду формы помогать генерировать cHash. Единственный обходной путь, который работает, - это отключение pageNotFoundOnCHashError в LocalConfiguration. Но мне это кажется неправильным.
Действие действует также, если я создаю ссылку с фиксированными поисковыми словами.

Итак, у меня возникли вопросы.

  • Зачем нужен cHash для действия без кэширования?
  • Как cHash может работать с формой вообще? Это концепция формы, в которой пользователь может изменять значения, и, насколько я понимаю, это концепция chash для предотвращения этого.

Вот также пример кода

<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>

Ответы [ 3 ]

1 голос
/ 27 июня 2019

cHash - это функция безопасности. Защищает от изменения параметров. И серверы, как дополнительный уровень безопасности, также предотвращает атаки кеша. Когда бот может генерировать ссылки с новыми параметрами и TYPO3, он кэширует результат каждой такой страницы и быстро увеличивает таблицы кеша в базе данных.

Однако из этого расчета можно исключить определенный параметр с помощью инструмента установки: [FE][cHashExcludedParameters] setting.

Исключенные параметры также не влияют на кеширование. (страницы кэшируются так, как если бы параметры отсутствовали), но если у вас есть не кешируемое действие, ваш результат должен быть сгенерирован на лету.

0 голосов
/ 27 июня 2019

Зачем нужен cHash для действия без кэширования?

cHash оценивается до того, как становится известно, какой TypoScript должен быть извлечен, поэтому также не известно, какой (не) кэшированные плагины должны быть загружены или если они требуют оценки cHash (или они отключены).

Как cHash вообще может работать с формой?Это концепция формы, в которой пользователь может изменять значения, и, насколько я понимаю, это концепция chash, чтобы предотвратить это.

Я не знаю, почему вы используетеотправка формы с HTTP GET.Однако учитываются все параметры GET, кроме исключенных (см. Ответ выше).

Я настоятельно рекомендую переключиться на HTTP POST - главным образом потому, что стандарт HTTP требует, чтобы параметры POST не кэшировались (также не вбраузер!), в противном случае Посетитель A может отправить что-то с помощью формы, а Посетитель B увидит результат от Посетителя A. POST предназначен для отправки данных, GET фактически определяется как режим «только для чтения» в HTTP.

Два варианта для TYPO3:

  • переключиться на POST, если нет необходимости в 100% для GET в вашем случае использования
  • используйте параметр cHashExcludedParameters в TYPO3, чтобы отключить всех пользователей-входные значения из формы.
0 голосов
/ 27 июня 2019

Зачем нужен cHash для действия без кэширования?

Я действительно не знаю. Может быть, они просто забыли об этом или никто не использует формы GET.

Как cHash может работать с формой вообще? Это концепция формы, в которой пользователь может изменять значения, и, насколько я понимаю, это концепция chash для предотвращения этого.

Параметры URL включены в chash. Поэтому отправка через POST не должна использовать chash, за исключением параметров action / controller.

Вы должны создать форму самостоятельно и проверить ее вручную или использовать Javascript. Indexed_search использует POST, изменяет страницу / указатель и скрытые поля формы и снова отправляет форму для разбивки на страницы.

...