Почему Safari отправляет заголовок Origin при перенаправлении? - PullRequest
0 голосов
/ 19 марта 2020

Я разрабатываю веб-приложение с JSF2.2 и использую защищенное представление для защиты CSRF.
Я использую Nginx в качестве обратного прокси-сервера.

Проблема, с которой я сталкиваюсь, заключается в Когда я выполняю запрос GET в результате перенаправления, которое является ответом на запрос POST ( PRG ), возникает следующая ошибка.
Этого не происходит, когда я использую Chrome, Firefox или Edge.

2020-03-02 16:30:33,623 SEVERE [javax.enterprise.resource.webcontainer.jsf.lifecycle] (default task-377) JSF1100: Origin [sic] header value https://example.com does not appear to be a protected view. Preventing display of viewId /some/protected/view.xhtml
2020-03-02 16:30:33,624 ERROR [my.project.commons.exception.logger.ExceptionLogFormatterImpl] (default task-377) SessionId=ZH1NL8D53vR6FLfG5hj4v3fNp3OVCByXBrzZJtGy RequestId=WNsDVWCm ContractNo=64811790 CSRFトークンエラー: javax.faces.application.ProtectedViewException: JSF1100: Origin [sic] header value https://example.com does not appear to be a protected view. Preventing display of viewId /some/protected/view.xhtml

Это связано с тем, что:

  • Вкл. RestoreViewPhase , JSF проверяет, является ли источник действительным, и не выполняется.
    (потому что JSF проверяет хост, порт и Origin пути, путь, в то время как у Origin нет пути. Для меня это похоже на ошибку ..)
  • Safari отправляет заголовок Origin при перенаправлении. В то время как Chrome, Firefox и Edge нет.

Итак, вопрос в том, почему Safari отправляет заголовок Origin при перенаправлении?
Видит спецификацию , заголовок Origin не будет установлен на запрос GET, если это не запрос CORS, Safari не отправляет Origin на обычные запросы GET (не перенаправляет).

Или это связано с обратным прокси-сервером? Возможно ли внутреннее перенаправление что-то вроде запроса CORS?

Это может быть воспроизведено с Safari 10.1.2 на Ma c OS X 10.10.5 и Safari 12.1.1 на iPad и not с Safari 13.0.4 на Ma c OS X 10.15.2

...