Clickjacking中间件和修饰符提供了易于使用的保护 clickjacking . 当恶意站点欺骗用户点击另一个站点的隐藏元素时,就会发生这种类型的攻击,这些隐藏元素已经被加载到隐藏框架或iframe中。
假设一个在线商店有一个页面,登录的用户可以点击“立即购买”来购买商品。为了方便起见,用户已选择随时登录商店。攻击者站点可能会在自己的某个页面上创建一个“我喜欢小马”按钮,并将商店的页面加载到透明的iframe中,这样“立即购买”按钮就隐约地覆盖在“我喜欢小马”按钮上。如果用户访问攻击者的网站,单击“我喜欢小马”将导致无意中单击“立即购买”按钮,并在不知情的情况下购买该物品。
现代浏览器向 X-Frame-Options 指示是否允许在帧或iframe中加载资源的HTTP头。如果响应包含值为的头 SAMEORIGIN
然后,如果请求来自同一个站点,浏览器将只加载框架中的资源。如果标题设置为 DENY
然后,无论哪个站点发出请求,浏览器都会阻止资源加载到框架中。
Django提供了几种方法将此标头包含在站点的响应中:
在所有响应中设置标头的中间件。
一组视图修饰符,可用于覆盖中间件或仅为某些视图设置标题。
这个 X-Frame-Options
只有在响应中还没有HTTP头的情况下,中间件或视图修饰符才会设置它。
X-Frame-Options
对于所有响应¶设置相同 X-Frame-Options
网站中所有响应的值,放入 'django.middleware.clickjacking.XFrameOptionsMiddleware'
到 MIDDLEWARE
::
MIDDLEWARE = [
...,
"django.middleware.clickjacking.XFrameOptionsMiddleware",
...,
]
此中间件在由生成的设置文件中启用 startproject
.
默认情况下,中间件将设置 X-Frame-Options
报头到 DENY
对于每个传出的 HttpResponse
. 如果希望此标头有任何其他值,请设置 X_FRAME_OPTIONS
设置:
X_FRAME_OPTIONS = "SAMEORIGIN"
使用中间件时,可能会有一些视图 not 想要 X-Frame-Options
标题集。对于这些情况,您可以使用一个视图修饰符,告诉中间件不要设置头:
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.")
备注
如果要提交表单或访问frame或iframe中的会话cookie,则可能需要修改 CSRF_COOKIE_SAMESITE
或 SESSION_COOKIE_SAMESITE
设置。
添加了对包装异步视图函数的支持 @xframe_options_exempt
装饰师。
X-Frame-Options
按视图¶设置 X-Frame-Options
在每个视图的基础上,Django提供了这些修饰符:
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.")
请注意,可以将修饰符与中间件结合使用。使用decorator会覆盖中间件。
添加了对包装异步视图函数的支持 @xframe_options_deny
和 @xframe_options_sameorigin
装修工。
这个 X-Frame-Options
在现代浏览器中,标题只能防止点击劫持。较旧的浏览器会悄悄地忽略标题并需要 other clickjacking prevention techniques .
X-Frame-Options
¶Internet Explorer 8+
边缘
火狐3.69+
歌剧10.5 +
狩猎4号
铬4.1+
A complete list 支持的浏览器数 X-Frame-Options
.
12月 18, 2023