web-dev-qa-db-ja.com

Apache X-Frame-Options Allow-From multiple domains

Apacheでxフレームヘッダーオプションを使用するとエラーが発生しました。

Header always append X-Frame-Options ALLOW-FROM site1,site2,site3

または

Header always append X-Frame-Options ALLOW-FROM=site1,site2,site3

または

Header always append X-Frame-Options ALLOW-FROM=site1
Header always append X-Frame-Options ALLOW-FROM=site2
Header always append X-Frame-Options ALLOW-FROM=site3

X-Frame-Options:ALLOW-FROMを設定して複数のドメインをサポートするにはどうすればよいですか?

ありがとう!

5
Yi Xiao
Header always append X-Frame-Options ALLOW-FROM=site1
Header always append X-Frame-Options ALLOW-FROM=site2
Header always append X-Frame-Options ALLOW-FROM=site3

この方法で問題ありません。
しかし、初めて使用したときにエラーが発生しました。
たぶん私は間違ったキャラクターを作る。

1
Yi Xiao
SetEnvIf Referer "^(https:\/\/.*\.example1\.com)/.*" X_FRAME_OPTIONS_ALLOWED=$1
SetEnvIf Referer "^(https:\/\/.*\.example2\.com)/.*" X_FRAME_OPTIONS_ALLOWED=$1

Header set X-Frame-Options SAMEORIGIN
Header append X-Frame-Options "ALLOW-FROM %{X_FRAME_OPTIONS_ALLOWED}e" env=X_FRAME_OPTIONS_ALLOWED`
4
cthorpe

EDIT 17/01/2018:これは正しいことです:

Header set X-Frame-Options SAMEORIGIN
Header append X-Frame-Options "ALLOW-FROM http://www.example.com/"  
Header append X-Frame-Options "ALLOW-FROM http://example.com/"
Header append X-Frame-Options "ALLOW-FROM https://www.example.com/"
Header append X-Frame-Options "ALLOW-FROM https://example.com/"

したがって、基本的にはサイト(SAMEORIGIN)からのiframeのみを許可し、許可されたURLのリストを「追加」で指定します。 「追加」を追加しない場合、各行が前の行を上書きします。

これは実際にはInternet Explorer 11で機能し、Firefox 57では機能せず、Chromeでは無視されます...

https://securityheaders.io でテストすると、複数のURIを処理できないため、「A」は得られません。

We couldn't detect a valid configuration. Expected values are "DENY", "SAMEORIGIN", "ALLOW-FROM (URL)" and "ALLOWALL".

IE11とFirefoxで動作するように見える別の可能性は次のとおりです。

 Header always set X-Frame-Options "ALLOW-FROM https://www.example.fr/ https://example.fr/ http://www.example.fr/ http://example.fr/"

https://securityheaders.io で結果を確認すると、「A」が表示されます

ちなみに、世界で最も使用されているブラウザー(Chrome)を使用せずにバイパスできるセキュリティ設定を使用する意味は何ですか?

3
cetipabo

X-Frame-Optionsの仕様では、DENY、SAMEORIGIN、およびALLOW-FROM( https://tools.ietf.org/html/rfc7034#section-2.1 )のいずれかを使用することのみを指定しています。一部のブラウザは複数のALLOW-FROMをサポートしていますが、多くのブラウザはALLOW-FROMをまったくサポートしていません。

最善のオプションは、frame-ancestorsディレクティブを使用してContent-Security-Policyヘッダーを実装することです。これにより、複数のURIを構成でき、ほとんどのブラウザーで認識されますが、IEおよびEdge 14以下)。

IEおよびEdge 14サポートの場合、ALLOW-FROMを使用してX-Frame-Optionsを設定することもできます。値のホワイトリストを作成する場合は、以下に基づいてALLOW-FROM URIを設定できます。リファラー。

両方のヘッダーを設定しても問題ありません。 Content-Security-Policyフレーム祖先を理解するブラウザはX-Frame-Optionsを無視し、フレーム祖先を理解しないブラウザはそれを無視し、可能であればX-Frame-Optionsを使用します。 https://caniuse.com/#search=csphttps://caniuse.com/#search=x-frame-options を組み合わせると、すべてのブラウザで機能します「Android用UCブラウザ」以外

1
Halvor Sakshaug

ALLOW-FROMのサポートはブラウザーによって実装とサポートの両方で異なるため、SAMEORIGINを設定するか、条件付きでX-Frame-Optionsを完全に削除する次の解決策を試しました。

Apache-2.4で試してみました。

# Set X-Frame-Options SAMEORIGIN _unless_ the referer is any of my allowed sites.
# Add one or more SetEnvIf - whatever suits your purpose
# This part you MUST adapt.

# ALLOW https://my.allowed.site.com
SetEnvIf Referer "^https:\/\/my\.allowed\.site\.com\/.*" X_FRAME_OPTIONS_ALLOWED

# ALLOW https://mysite.tld.com and https://yoursite.tld.com
SetEnvIf Referer "^https:\/\/(mysite|yoursite)\.tld\.com\/.*" X_FRAME_OPTIONS_ALLOWED

# ALLOW https://mysite.tld.com and https://yoursite.theother.org
SetEnvIf Referer "^https:\/\/(mysite\.tld\.com|yoursite\.theother\.org)\/.*" X_FRAME_OPTIONS_ALLOWED

# Set X-Frame-Options = SAMEORIGIN _unless_ the referer is in the allow list.
Header always set X-Frame-Options SAMEORIGIN env=!X_FRAME_OPTIONS_ALLOWED

# Always _unset_ X-Frame-Options if the referer is in the allow list.
Header always unset X-Frame-Options env=X_FRAME_OPTIONS_ALLOWED

複数のSetEnvIfを追加するか、正規表現-YMMVを展開できます。

あなたの同僚は、物を読みやすくすることであなたを愛します...

1
sastorsl

ALLOW-FROMが Firefox 70から削除されました であり、他のブラウザーが続く可能性が高いことは注目に値します。代わりに、ブラウザの 約90% でサポートされているCSPの frame-ancestors ディレクティブを使用する必要があります。

あなたの例は次のようになります:

Header always append Content-Security-Policy "frame-ancestors site1 site2 site3;"
1
Sora2455

EDIT 17/01/2018:

以下のこの解決策は正しくありません。各行の設定が前の行を上書きしているためです。 http://example.com/のみを許可します

最後に、私はそのための正しい構文を見つけました。このサイトによると: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options

Header set X-Frame-Options "ALLOW-FROM https://example.com/"

これは私のために働きました:

Header always set X-Frame-Options "ALLOW-FROM https://www.example.com/"
Header always set X-Frame-Options "ALLOW-FROM https://example.com/"
Header always set X-Frame-Options "ALLOW-FROM http://www.example.com/"
Header always set X-Frame-Options "ALLOW-FROM http://example.com/"
0
cetipabo