zoukankan      html  css  js  c++  java
  • 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.")

    示例二:

    @xframe_options_sameorigin
    @csrf_exempt
    def wiki_upload(request,project_id):
        """markdown上传图片"""
        print("收到上传的图片了")
        image_object = request.FILES.get("editormd-image-file")
        #image_object文件对象上传到当前项目的存储桶中
        image_url = upload_file(
            request.tracer.project.bucket,
            request.tracer.project.region,
            image_object,
            image_object.name,
        )
        print(image_url)
        #result是markdown要求返回的数据格式
        result = {
            'success': 1,#1成功,0失败
            'message': None,
            'url': image_url
        }
    
        return JsonResponse(result)

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

    参考内容:

      原文链接:https://blog.csdn.net/cn_newer/article/details/103866410

    1. 事件起因事件的起因是这样的,我在使用Django服务的时候,想在一个已经存在某个按钮的主页面上,单击这个按钮弹出某个功能页面,设置某些内容,然后再退回到主页面。我使用了某个插件,在弹出的页面上显示我请求的链接被服务器拒绝。在使用浏览器调试的console页面中有如下的提示信息:Refused to display '页面url' in a frame because it set 'X-Frame-Options' to 'deny'.那么就知道是是X-Frame-Options设置出了问题。
    2. 有关X-Frame-Options2.1 什么是X-Frame-OptionsX-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',    ...]12345上面的内容显示,Django的项目中默认设置了XFrameOptionsMiddleware的中间件,这个设置将对于X-Frame-Options的配置设置成了DENY。在Django 3.0中,X_FRAME_OPTIONS的默认设置从SAMEORIGIN 变成了DENY。
    3.2 Django总体配置想要总体设置项目的X-Frame-Options可以使用如下的代码:
    X_FRAME_OPTIONS = 'SAMEORIGIN'1可以看出上面的是将X_FRAME_OPTIONS设置成SAMEORIGIN,但是这个改变了整个项目的设置,往往只有某些页面才需要这样的设置,因此下面介绍在单独的页面上设置这些内容。
    3.3 指定的网页配置直接看代码:
    from django.http import HttpResponsefrom django.views.decorators.clickjacking import xframe_options_exemptfrom django.views.decorators.clickjacking import xframe_options_denyfrom django.views.decorators.clickjacking import xframe_options_sameorigin

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

    @xframe_options_denydef view_two(request):return HttpResponse("I won't display in any frame!")
    @xframe_options_sameorigindef view_three(request):return HttpResponse("Display in a frame if it's from the same origin as me.")123456789101112131415161718从上面的相应和名称能够很容易看出分别的含义,不在更详细描述。————————————————版权声明:本文为CSDN博主「cn_newer」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/cn_newer/article/details/103866410

  • 相关阅读:
    整数反转
    最长公共前缀
    罗马数字转整数
    单点登录
    VMware Workstation虚拟机密钥
    Pytest 用例内部执行顺序
    判断是不是回文数
    python端口IP字符串是否合法
    python求二叉树深度
    有两个字符串类型的数字,实现一个方法将它们进行相加,并返回相加后的数值。
  • 原文地址:https://www.cnblogs.com/fuyuteng/p/14808248.html
Copyright © 2011-2022 走看看