【问题标题】:Why xframe_options_exempt doesn't work for my Django view?为什么 xframe_options_exempt 不适用于我的 Django 视图?
【发布时间】:2014-08-02 10:40:43
【问题描述】:

我希望通过 iframe 从另一个域加载我的视图页面,因此按照 Django 文档,我将装饰器 @xframe_options_exempt 添加到我的视图中。但是在iframe中加载的时候,Chrome还是会报:

Uncaught SecurityError: Blocked a frame with origin "http://www.aaa.com" from access a frame with origin "http://bbb.com".

在 DevTools Network 选项卡中,我看到响应不包含“X-Frame-options”标头。

这里发生了什么?

【问题讨论】:

    标签: python django iframe web same-origin-policy


    【解决方案1】:

    您可能已经想通了,但遗憾的是 Django xframe_options_exempt 仅适用于当前版本(2021 年 3 月)的 HTTPResponse。

    如何使用它的一个例子是:

    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.")
    

    对于sameorigin和deny,应该是:

    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("Frame won't be displayed!")
    
    @xframe_options_sameorigin
    def view_two(request):
        return HttpResponse("Display onlly if from the same origin host.")
    
    

    引用自Django Clickjacking Protection

    【讨论】:

      【解决方案2】:

      我也遇到了同样的问题。就我而言,我提出了一个Http404 错误,这似乎以某种方式绕过了@xframe_options_exempt 装饰器。我怀疑如果您从视图中返回除 HttpResponse 对象以外的任何对象,那么您的 xframe_options_exempt 装饰器可能不会像您预期的那样执行。

      注意Http404 类,例如does not inherit 来自HttpResponse

      【讨论】:

        【解决方案3】:

        在您的 settings.py 文件中包含中间件

        MIDDLEWARE_CLASSES = (
            ...
            'django.middleware.clickjacking.XFrameOptionsMiddleware',
            ...
        )
        

        然后在您的 views.py 文件中包含所需的导入

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

        【讨论】:

          猜你喜欢
          • 2018-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-28
          • 1970-01-01
          • 2021-11-13
          相关资源
          最近更新 更多