【问题标题】:How to configure X-Frame-Options in Django to allow iframe embedding of one view?如何在 Django 中配置 X-Frame-Options 以允许 iframe 嵌入一个视图?
【发布时间】:2016-01-20 22:14:21
【问题描述】:

我正在尝试启用 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)

据我了解,这无济于事,因为它只能嵌入到同一服务器中。

如何设置特定视图的标题以使其能够嵌入任何网站?

郑重声明,我只是一个前端开发人员,开发该网站的后端开发人员不再与我合作并拒绝记录他的代码,所以,如果有人可以帮助我并仔细解释我在哪里以及做了哪些修改应该做,我会非常感谢它。

谢谢。

据我所知,Django 版本是 1.6

【问题讨论】:

    标签: django iframe http-headers x-frame-options


    【解决方案1】:

    如果您想在特定视图中允许框架,您可以将 Content-Security-Policy 添加到您的视图响应中,因此您的代码将是这样的

    def MyView(request):
        ....
        ....
        response = render(request,'MyViewHtml.html' ,{...})
        response ['Content-Security-Policy'] = "frame-ancestors 'self' https://example.com"
    

    【讨论】:

      【解决方案2】:

      显然,您可以在设置中设置一条规则,告诉以下内容:

      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

      【讨论】:

      【解决方案3】:

      您正朝着正确的方向前进,但实现此目标所需的确切装饰器是“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 不再受支持。现在是升级的好时机。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 2021-10-17
      • 2013-12-21
      • 2017-11-10
      相关资源
      最近更新 更多