x frame optionsと同一オリジンポリシ

yukiさん  
(No.1)
x frame optionsと同一オリジンポリシーについて教えて下さい。
 
 x frame options 例えばサイトAのコンテンツを他のサイトBにframe を使って呼び出されないようにする
 今のイメージは上記なのですがここまでは合っているのでしょうか?
 
 するといくつか質問があります。
 httpのレスポンスヘッダにx frame optionsを付けるのですか?
 だとするとサイトBにframeでAサイトを表示させると
 サイトBがhttpリクエストをサイトAに送るのでしょうか?
 
 また基本は同一オリジンポリシーでサイトAとサイトBはオリジンが違うからコンテンツ呼び出せない気がするのですが、どうなのでしょうか?
 
 まだ理解が不十分でよく分かっておりません。
 どこがどう間違っているか教えていただけると幸いです。
2023.04.03 22:07
pixさん 
SC ダイヤモンドマイスター
(No.2)
すみません。少々説明が難しいのでその点はご容赦願います。

X-Frame-OptionsはHTTPレスポンスヘッダです。
ページをiframeなどで表示してよいか否かを設定します。

オプションは以下の2つです
X-Frame-Options DENY
      フレーム内の表示を禁止する
X-Frame-Options SAMEORIGIN
      同一オリジンのみ許可する

>x frame options 例えばサイトAのコンテンツを他のサイトBにframe を
>使って呼び出されないようにする
>今のイメージは上記なのですがここまでは合っているのでしょうか?
はい。おおむね、そのイメージであっています。

>httpのレスポンスヘッダにx frame optionsを付けるのですか?
>だとするとサイトBにframeでAサイトを表示させると
>サイトBがhttpリクエストをサイトAに送るのでしょうか?
HTTPレスポンスヘッダとしてX-Frame-Optionsを追加します。
サイトBでHTMLの<iframe>タグでサイトAを参照する時に、
サイトBからHTTPリクエストをサイトAに送ります。

>また基本は同一オリジンポリシーでサイトAとサイトBはオリジンが違うから
>コンテンツ呼び出せない気がするのですが、どうなのでしょうか?
少々混同されているようです。
同一オリジンポリシーがデフォルトで有効なのはJavaScriptなどの
クライアントスクリプトです。
スクリプトの標準機能で、スクリプトから外部のリソースへのアクセスを
禁止します。
これによりスクリプトから情報を読み出すような攻撃を防ぎます。
スクリプトからのアクセスを許可する方法としてCORSがあります。

しかし、<iframe>タグはJavaScriptなどではなく、HTMLのタグです。
デフォルトではフレーム内にページの表示が許可されています。
X-Frame-Optionsの設定によりフレーム内に表示していいかどうかを
Webブラウザが制御します。
主にクリックジャッキング攻撃を防ぐために設定されます。
2023.04.04 08:09
yukiさん  
(No.3)
ご回答ありがとうございます。

>HTTPレスポンスヘッダとしてX-Frame-Optionsを追加します。
サイトBでHTMLの<iframe>タグでサイトAを参照する時に、
サイトBからHTTPリクエストをサイトAに送ります。

WEBブラウザ→サイトBにHTTPリクエスト、サイトB→サイトAにHTTPリクエスト
サイトA→サイトBにHTTPレスポンス、サイトB→WEBブラウザにHTTPレスポンス
という流れになるのでしょうか?


>同一オリジンポリシーがデフォルトで有効なのはJavaScriptなどの
クライアントスクリプトです。

適用範囲が違うのですね!
<iframe>はデフォルトでクロスオリジンも許可されているからx frame optionsで許可範囲を制御

JavaScriptはデフォルトでSOPが有効な為、クロスオリジンも許可したい場合はCORS
で許可する。

こんなイメージでしょうか?
2023.04.04 10:34
pixさん 
SC ダイヤモンドマイスター
(No.4)
>>サイトBでHTMLの<iframe>タグでサイトAを参照する時に、
>>サイトBからHTTPリクエストをサイトAに送ります。
>WEBブラウザ→サイトBにHTTPリクエスト、サイトB→サイトAにHTTPリクエスト
>サイトA→サイトBにHTTPレスポンス、サイトB→WEBブラウザにHTTPレスポンス
>という流れになるのでしょうか?
すみません。先ほどの説明に誤りがありました。サイトAにアクセスするのは
WEBブラウザです。

WEBブラウザ→サイトBにHTTPリクエスト
  サイトB→WEBブラウザにHTTPレスポンス、HTMLを返す
    WEBブラウザ→サイトAにHTTPリクエスト
      サイトA→WEBブラウザにHTTPレスポンス、HTMLを返す
        WEBブラウザでサイトAからのHTTPレスポンスのX-Frame-Optionsを調べて
        iframe内にHTMLを表示してよいか判断
です。


>適用範囲が違うのですね!
><iframe>はデフォルトでクロスオリジンも許可されているから
>x frame optionsで許可範囲を制御
>JavaScriptはデフォルトでSOPが有効な為、クロスオリジンも許可したい場合は
>CORSで許可する。
はいそのイメージでよいと思います。
2023.04.04 13:27
yukiさん  
(No.5)
>WEBブラウザでサイトAからのHTTPレスポンスのX-Frame-Optionsを調べて
>iframe内にHTMLを表示してよいか判断

サイトAはコンテンツ自体はブラウザにHTTPレスポンスで返すのですか?
表示させるかの判断はブラウザ側ということは、
不正なブラウザを自作したら見れるのでしょうか?

意味のないことかもしれませんが気になってしまったので、、
2023.04.04 14:41
pixさん 
SC ダイヤモンドマイスター
(No.6)
>>WEBブラウザでサイトAからのHTTPレスポンスのX-Frame-Optionsを調べて
>>iframe内にHTMLを表示してよいか判断

>サイトAはコンテンツ自体はブラウザにHTTPレスポンスで返すのですか?
>表示させるかの判断はブラウザ側ということは、
>不正なブラウザを自作したら見れるのでしょうか?
>意味のないことかもしれませんが気になってしまったので、、
はい。見れます。
多少誤解されている点があると思われます。
サイトAもサイトBもWebブラウザではなく、curlなどのコマンドラインを使えば、
普通にPCからページを取得できます。個別にみることは問題ないです。

クリックジャッキングはiframeを利用してサイトAとサイトBを重ねて表示し、
利用者を騙すものです。
2つのサイトが重なることによって攻撃が成立するものなので、個別に
アクセスしただけでは特に意味はありません。
2つのサイトがiframe経由で重ねられないようにするための、X-Frame-Optionsの
設定になります。

クリックジャッキングの詳細についてはネットを検索してみてください。
2023.04.04 15:18
yukiさん  
(No.7)
ありがとうございます!
もう一度調べてみます。
2023.04.04 15:52

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop