web-dev-qa-db-ja.com

これは、X-Frame-Optionsを動的に設定するための安全な方法ですか? (複数ドメイン)

X-Frame-Optionsヘッダーは、サイトが他のドメインによってiFrame化されるのを防ぎます。 ALLOW-FROMディレクティブを受け入れるブラウザでは、指定できるOriginは1つだけです。最新のUAにはCSP 2.0 frame-ancestorsディレクティブを使用できます。

そうは言っても、要求リファラーに基づいて応答ヘッダーを動的にレンダリングし、応答に設定するX-Frame-Optionsヘッダーのタイプを決定することが可能です。

たとえば、デフォルトでX-Frame-Options: denyを提供し、コントローラーレベルでdenyをレンダリングするか、X-Frame-Optionsヘッダーを送信せずに、そのリクエストをiFrame化することができます。

疑似コード:

referer_Host = request.referer
if allowed_origins.includes(referer_Host)
  response.headers['X-Frame-Options'] = '' # Remove header from response
else
  response.headers['X-Frame-Options'] = 'deny'
end

このセキュリティメカニズムを無効にすることはできますか?攻撃者が制御するドメインが、UAがjavascriptハッカーを介して送信するreferer値を偽造することは可能ですか?

4
Alex Urcioli

私の知る限り、通常のブラウジングセッションで完全に偽のリファラーヘッダーを挿入することは不可能です。ただし、Refererヘッダーがまったく送信されないようにするには、さまざまな方法があります。したがって、Refererヘッダーが設定されており、Refererのドメインが明示的にサイトのフレーム化を許可されている場合にのみフレーム化を許可する限り、安全である必要があります。

ただし、good-sitehttp://bad-site/good-site/などの方法でフレームを作成できるため、http://good-site.bad-site/を確認するために、Refererで盲目的に正規表現がスローされないことを確認してください。あなたはそのような間違いをする最初ではないでしょう。

5
Steffen Ullrich