Установите 'Referrer-Policy' = 'same-origin'

Здравствуйте,

Я хочу установить заголовок ‘Referrer-Policy’ в ‘same-origin’. Это нельзя сделать через nginx, так как он задается через Redis/Rails.

По умолчанию, кажется:
Referrer-Policy => strict-origin-when-cross-origin

Возможно ли изменить это на:
Referrer-Policy => same-origin

Я не смог найти эту строку ни внутри, ни снаружи контейнера. :roll_eyes:

Да. Глупо. Я искал не в том месте.

Я нашел много вхождений:
Referrer-Policy' => 'strict-origin-when-cross-origin'

Вот список (grep strict-origin-when-cross-origin /var/www/discourse/ -R):

  • /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-protection-2.2.2/lib/rack/protection/referrer_policy.rb: # referrer_policy:: Политика, которую следует использовать (по умолчанию: ‘strict-origin-when-cross-origin’)
  • /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-protection-2.2.2/lib/rack/protection/referrer_policy.rb: default_options :referrer_policy => ‘strict-origin-when-cross-origin’
  • /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_0.rb.tt:# “Referrer-Policy” => “strict-origin-when-cross-origin”
  • /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/application/configuration.rb: “Referrer-Policy” => “strict-origin-when-cross-origin”
  • /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/actionpack-7.0.3.1/lib/action_dispatch/railtie.rb: “Referrer-Policy” => “strict-origin-when-cross-origin”
  • /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-protection-3.0.2/lib/rack/protection/referrer_policy.rb: # referrer_policy:: Политика, которую следует использовать (по умолчанию: ‘strict-origin-when-cross-origin’)
  • /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-protection-3.0.2/lib/rack/protection/referrer_policy.rb: default_options referrer_policy: ‘strict-origin-when-cross-origin’
  • /var/www/discourse/config/initializers/new_framework_defaults_7_0.rb: “Referrer-Policy” => “strict-origin-when-cross-origin”
  • grep: /var/www/discourse/tmp/cache/bootsnap/compile-cache-iseq/f6/fc077900e2584e: совпадение в двоичном файле
  • grep: /var/www/discourse/tmp/cache/bootsnap/compile-cache-iseq/8a/029cf0d9c06e6d: совпадение в двоичном файле
  • grep: /var/www/discourse/tmp/cache/bootsnap/compile-cache-iseq/25/d90a345e4f734e: совпадение в двоичном файле

Я действительно не знаю, где установить same-origin. Есть какие-нибудь подсказки?

Довольно неприятный хак здесь, но

вы можете решить эту проблему в nginx, добавив proxy_hide_header, а затем указав свой собственный add_header.

Да, неприятный взлом. Не нравится это. :wink:

Любая помощь, Herr: где правильное место, которое используется в продакшене?

Чуть менее грязный хак — добавить это в секцию HTML пользовательского компонента темы:

<meta name="referrer" content="same-origin">

Это не удаляет HTTP-заголовок, и я не нашёл однозначной информации о том, перезаписывает ли HTTP-заголовок HTML-мета-тег или наоборот. Но, по крайней мере, согласно быстрому тесту на whatsmyreferer.com, это работает: заголовок referrer больше не отправляется на исходящие ссылки.