본문 바로가기

81 Django iframe 설정 허용하기

81.1 iframe

iframe은 웹페이지 안에 다른 웹페이지를 불러와 표시할수 있는 기능입니다.
장고 웹페이지에서 iframe을 사용하면 연결 거부 메시지를 확인 할 수 있습니다.

미들웨어 설정의 XFrameOptionsMiddleware의 기본 옵션이 DENY로 되어 있어 iframe 로드를 거부합니다.

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

위 스샷은 아래와 같이 iframe로 example_hello을 로드하였지만 거부된 스샷입니다.

<iframe id="phaser_iframe" height="300" width="100%" src="{% url 'phaser:example_hello'%}"></iframe>

81.2 XFrameOptionsMiddleware option

XFrameOptionsMiddleware 은 내 페이지를 다른서버에서 iframe으로 로드 할 때 제어할 수 있는 설정입니다.

설정 할 수 있는 방법은 2가지 있습니다.
1. XFrameOptionsMiddleware 옵션
2. 데코레이션 사용

1. XFrameOptionsMiddleware 옵션

#setting.py
    ...
MIDDLEWARE = [
    ...
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

X_FRAME_OPTIONS = 'SAMEORIGIN'
# X_FRAME_OPTIONS = 'DENY'
    ...
    ...
옵션 설명
DENY 사용거부
SAMEORIGIN 동일한 사이트에서 시작되는 경우만 프레임을 로드

※ 옵션설정 없이 XFrameOptionsMiddleware를 삭제 해도 됩니다.

2. 데코레이션 사용
- view 클래스에서 @xframe_options_deny, @xframe_options_sameorigin 데코레이션으로 사용가능

from django.http import HttpResponse
from django.views.decorators.clickjacking import xframe_options_deny
from django.views.decorators.clickjacking import xframe_options_sameorigin

@xframe_options_deny
def view_one(request):
    return HttpResponse("I won't display in any frame!")

@xframe_options_sameorigin
def view_two(request):
    return HttpResponse("Display in a frame if it's from the same origin as me.")

Django Documentation : https://docs.djangoproject.com/en/4.1/ref/clickjacking/#setting-x-frame-options-for-all-responses

81.3 적용확인

phaser:example_hello는 정상적으로 로드 되었고,

naver.com은 연결거부입니다.
- 네이버 서버는 아이프레임을 사용할 수 없도록 적용되어 있기 때문입니다.

    ...
    ...
<iframe id="phaser_iframe" height="300" width="100%" src="{% url 'phaser:example_hello'%}"></iframe>
<iframe id="phaser_iframe" height="300" width="100%" src="https://www.naver.com/"></iframe>
    ...
현재글 : 81 Django iframe 설정 허용하기
Comments
Login:

Copyright © PythonBlog 2021 - 2022 All rights reserved
Mail : PYTHONBLOG