Настройка X-Frame-Options в ответе Phoenix - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь создать приложение с в качестве бэкэнда. Я следовал этому руководству , чтобы загрузить свое приложение в администраторе shopify, и мне нужно изменить заголовок x-frame-options.

Это мой штекер:

@doc false
def init(opts \\ %{}), do: Enum.into(opts, %{})

@doc false
def call(%{params: %{"shop" => shopify_domain}} = conn, _opts) do
  IO.puts("++++++++++ Plug Call ++++++++++++++")
  IO.inspect(shopify_domain)
  # %{"shopify_domain" => shopify_domain_only} = shopify_domain
  shop = ShopifyApp.find_shop_by(shopify_domain)

  allow_shop_or_halt(conn, shop)
end

def call(conn, _opts), do: conn

defp allow_shop_or_halt(conn, nil), do: Conn.halt(conn)

defp allow_shop_or_halt(conn, shop) do
  conn
  |> Conn.put_private(:shop, shop)
  |> Conn.put_resp_header("x-frame-options", "ALLOW-FROM https://#{shop.shopify_domain}/")
end

Но консоль в браузере Chrome жалуется, что:

Недопустимый заголовок 'X-Frame-Options' при загрузке .....: ALLOW-FROM https://skbeautysupply.myshopify.com/' не является признанным директивы. Заголовок будет игнорироваться.

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 06 ноября 2018

Да, это задокументированная проблема. Согласно спецификации , это не работает в Chrome или Safari. Вы можете сделать одну из двух вещей:


1. Не устанавливайте Header

Вы можете сделать это, не используя плагин :put_secure_browser_headers на первом месте или удалив заголовок x-frame-options (после вызова):

delete_resp_header(conn, "x-frame-options")

2. Используйте Content-Security-Policy

Второй вариант - указать ваш домен в frame-ancestors источниках в заголовках CSP для полной поддержки. Вы можете использовать X-Frame-Options и Content-Security-Policy или просто CSP:

conn
|> put_resp_header("X-Frame-Options", "ALLOW-FROM https://example.com")
|> put_resp_header("Content-Security-Policy", "frame-ancestors https://example.com;")
...