Django的X-Frame-Options设置

1. 事件起因

事件的起因是这样的,我在使用Django服务的时候,想在一个已经存在某个按钮的主页面上,单击这个按钮弹出某个功能页面,设置某些内容,然后再退回到主页面。
我使用了某个插件,在弹出的页面上显示我请求的链接被服务器拒绝。
在使用浏览器调试的console页面中有如下的提示信息:Refused to display '页面url' in a frame because it set 'X-Frame-Options' to 'deny'.
那么就知道是是X-Frame-Options设置出了问题。

2. 有关X-Frame-Options

2.1 什么是X-Frame-Options

X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 <frame>, </iframe> 或者 <object> 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。

2.2 X-Frame-Options选项

X-Frame-Options 有三个值:

  • DENY :表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许
  • SAMEORIGIN :表示该页面可以在相同域名页面的 frame 中展示
  • ALLOW-FROM uri :表示该页面可以在指定来源的 frame 中展示

换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。
另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。

3.Django有关配置

3.1 Django默认的配置

首先,Django起禁止X-Frame-Options,使用默认设置了相关的配置。
在项目的setting.py页面中能够找到如下的设置:

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

上面的内容显示,Django的项目中默认设置了XFrameOptionsMiddleware的中间件,这个设置将对于X-Frame-Options的配置设置成了DENY
在Django 3.0中,X_FRAME_OPTIONS的默认设置从SAMEORIGIN 变成了DENY

3.2 Django总体配置

想要总体设置项目的X-Frame-Options可以使用如下的代码:

X_FRAME_OPTIONS = 'SAMEORIGIN'

可以看出上面的是将X_FRAME_OPTIONS设置成SAMEORIGIN,但是这个改变了整个项目的设置,往往只有某些页面才需要这样的设置,因此下面介绍在单独的页面上设置这些内容。

3.3 指定的网页配置

直接看代码:

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


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


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

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

从上面的相应和名称能够很容易看出分别的含义,不在更详细描述。

4. 参考内容

  1. https://zhidao.baidu.com/question/502193450915313244.html
  2. https://docs.djangoproject.com/en/3.0/ref/clickjacking/
  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Header always set X-Frame-Options SAMEORIGIN的含义是将X-Frame-Options协议头设置为SAMEORIGIN。这意味着该页面只能在相同的域名下的框架中加载,而不能在其他域名下的框架中加载。 这个设置可以防止点击劫持攻击,点击劫持攻击是一种黑客攻击技术,通过将恶意网站嵌入到一个透明的iframe中,诱使用户在不知情的情况下点击了恶意网站上的某些内容。通过设置X-Frame-Options为SAMEORIGIN,可以确保页面只能在相同域名下的框架中加载,从而防止点击劫持攻击。 范例:<<引用:通常,这个中间件会为任何开放的HttpResponse设置X-Frame-Options协议头为SAMEORIGIN。如果你想用DENY来替代它,要设置X_FRAME_OPTIONS: X_FRAME_OPTIONS = 'DENY' 。 引用:使用这个中间件时可能会有一些视图,你并不想为它设置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.") 为每个视图设置 X-Frame-Options 。>> Header always set X-Frame-Options SAMEORIGIN的含义是将X-Frame-Options协议头设置为SAMEORIGIN。这意味着该页面只能在相同的域名下的框架中加载,而不能在其他域名下的框架中加载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值