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: