web-dev-qa-db-ja.com

Django)でX-Frame-Optionsを構成して、1つのビューのiframe埋め込みを許可する方法は?

Djangoを有効にして、特定のビューを外部サイトに埋め込むことができるようにします。サイトの制限なしにできればできます。

私のviews.pyファイルに次のコードを追加しました。ここで、ビューfuturebigは埋め込みを有効にしたいものです。

from Django.views.decorators.clickjacking import xframe_options_sameorigin
...
@xframe_options_sameorigin
def futurebig(request):
    ...
    return render_to_response('templates/iframe/future_clock_big.html', context_dict, context)

同じサーバーに埋め込むことができるだけなので、私には理解できません。

特定のビューのヘッダーを設定して、それを任意のWebサイトに埋め込むにはどうすればよいですか?

ちなみに、私は単なるフロントエンド開発者です。サイトを開発したバックエンド開発者は私と協力していないため、彼のコードを文書化することを拒否しました。私はそれをとても高く評価します。

ありがとう。

私の知る限り、Djangoバージョンは1.6です

27
user1230041

あなたは正しい方向に進んでいますが、これを達成するために必要な正確なデコレータは「xframe_options_exempt」です。

from Django.http import HttpResponse
from Django.views.decorators.clickjacking import xframe_options_exempt

@xframe_options_exempt
def ok_to_load_in_a_frame(request):
    return HttpResponse("This page is safe to load in a frame on any site.")

PS:Django 1.6はサポートされなくなりました。今すぐアップグレードを入手してください。

46
iankit

どうやらあなたはあなたの設定で以下を伝えるルールを設定することができます:

X_FRAME_OPTIONS = 'ALLOW-FROM https://example.com/'

また、今日では、CSPへの移行を検討する必要があります

Content-Security-Policy: frame-ancestors 'self' example.com *.example.net ;

参照してください https://stackoverflow.com/a/25617678/186202

17
Natim

最新のインターネットブラウザーには、HTTPヘッダーX-Frame-Optionsの組み込みシステムがあります。これは、フレームまたはiframe内でのリソースの読み込みを許可する設定と考えることができます。ヘッダーは2つの値を取ります。

  • [〜#〜] sameorigin [〜#〜]は、リクエストがからのものである場合にのみ、フレームにリソースをロードする権限を与えますプライマリサイト。

  • [〜#〜] deny [〜#〜]は、リソースに関係なく、あらゆる種類のフレームまたはiframe内のリソースをロードする権限をブロックします。 Originをリクエストします。

Djangoのクリックジャッキング保護の実装

  1. すべての応答にヘッダーを設定する単純なミドルウェア。
  2. ミドルウェアをオーバーライドするため、または特定のビューのヘッダーのみを設定するために使用できるビューデコレーターのセット。

X-Frame-Options HTTPヘッダーは、ミドルウェアまたはビューデコレーターによって設定されます(応答にまだ存在しない場合)。

すべての応答のXフレームオプションの設定

サイトのすべての応答に同じX-Frame-Options値を設定するには、Django.middleware.clickjacking.XFrameOptionsMiddlewareMIDDLEWAREに入れます。

MIDDLEWARE = [
    ...
    'Django.middleware.clickjacking.XFrameOptionsMiddleware',
    ...
]

上に表示されたmiddlewareは、すべてのSAMEORIGINのX-Frame-Optionsヘッダー値をHttpResponseに設定します。代わりにDENYを使用する必要がある場合は、いつでもこの設定を必要な値に設定できます。

X_FRAME_OPTIONS = 'DENY'

X-Frame-Optionsヘッダー値を設定したくないビューが必要な場合があります。このような場合、Djangoは、ミドルウェアにヘッダーを設定しないように指示するビューデコレーターを提供します。

from Django.http import HttpResponse

from Django.views.decorators.clickjacking import xframe_options_exempt

@xframe_options_exempt

def let_load_in_an_iframe(request):

    return HttpResponse("This page is safe to load in an iframe on any site.")

@xframe_options_deny@xframe_options_sameoriginは、X = Frame-Optionsヘッダーをセレクティブビューベースで設定するために@xframe_options_exempt以外にDjangoが提供する他のデコレーターです。

ソース

3
Alex Jolig