Заглатывает ли режим API Rails 5.2 заголовки безопасности по умолчанию?

Если я выведу config.action_dispatch.default_headers в свой application.rb, я увижу все стандартные заголовки rails:

{"X-Frame-Options"=>"SAMEORIGIN", "X-XSS-Protection"=>"1; mode=block", "X-Content-Type-Options"=>"nosniff", "X-Download-Options"=>"noopen", "X-Permitted-Cross-Domain-Policies"=>"none", "Referrer-Policy"=>"strict-origin-when-cross-origin"}

Однако, если я затем сделаю запрос в свое приложение (с помощью curl/browser/postman), я не увижу ничего из вышеперечисленного. Я вижу только следующее:

$  curl -v -XGET 'localhost:4000/myresource/581'
* TCP_NODELAY set
* Connected to localhost (::1) port 4000 (#0)
> GET /myresource/581 HTTP/1.1
> Host: localhost:4000
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: application/json; charset=utf-8
< ETag: W/"292a7d87b10e292374e765dd0b56fee7"
< Cache-Control: max-age=0, private, must-revalidate
< X-Request-Id: 7ff75ff6-f598-4489-9439-a4c17c6a5480
< X-Runtime: 0.025049
< Transfer-Encoding: chunked
<

Все это работает локально без веб-сервера/прокси. В производстве мне не хватает тех же заголовков.

Удаляет ли режим Rails API заголовки, которые, по его мнению, не имеют отношения к API? Или это может быть только какой-то другой код в моем приложении, который делает это?


person iftheshoefritz    schedule 06.05.2019    source источник


Ответы (2)


Rails 5.x в режиме API не включает заголовки ActionDispatch по умолчанию.

Это проблема: https://github.com/rails/rails/issues/34940.

Но сейчас это исправлено и будет доступно в версии 6.0.0: https://github.com/rails/rails/pull/32484

person Matheus    schedule 06.05.2019

Я столкнулся с той же проблемой несколько месяцев назад, поскольку @Matheus упомянул, что они исправили это в rails 6, но на случай, если вы застряли с rails 5.2, что было в моем случае, вот как я исправил проблему, надеюсь, это поможет! ????:

before_action :put_headers

  def put_headers
    response.set_header('Referrer-Policy', 'strict-origin-when-cross-origin')
    response.set_header('X-Content-Type-Options', 'nosniff')
    response.set_header('X-Frame-Options', 'SAMEORIGIN')
    response.set_header('X-XSS-Protection', '1; mode=block')
    response.set_header('Content-Security-Policy', "default-src 'self' https:; " \
        "img-src 'self' https:;" \
        "media-src 'none'; " \
        "object-src 'none'; " \
        "script-src 'self'; " \
        "style-src 'self' ")
  end

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

person r4cc00n    schedule 19.12.2020