Django 出現 frame because it set X-Frame-Options to deny 錯誤

来源:https://www.cnblogs.com/huaxiayuyi/archive/2022/10/04/16753104.html
-Advertisement-
Play Games

一、背景 使用django3 進行開發時,由於項目前端頁面使用iframe框架,瀏覽器錯誤提示信息如下 Refused to display 'http://127.0.0.1:8000/' in a frame because it set 'X-Frame-Options' to 'deny'. ...


一、背景


使用django3 進行開發時,由於項目前端頁面使用iframe框架,瀏覽器錯誤提示信息如下

Refused to display 'http://127.0.0.1:8000/' in a frame because it set 'X-Frame-Options' to 'deny'.

 根據提示信息發現是因為 X-Frame-Options=deny 導致的。

 

二、X-Frame-Options


1 X-Frame-Options是什麼

The X-Frame-Options HTTP 響應頭是用來給瀏覽器 指示允許一個頁面 可否在 <frame><iframe>,<embed> 或者 <object>中展現的標記。站點可以通過確保網站沒有被嵌入到別人的站點裡面,從而避免點擊劫持(clickjacking)攻擊。

2 語法

X-Frame-Options 有三個值:

  • DENY :表示該頁面不允許在 frame 中展示,即便是在相同功能變數名稱的頁面中嵌套也不允許

  • SAMEORIGIN :表示該頁面可以在相同功能變數名稱頁面的 frame 中展示

  • ALLOW-FROM uri :表示該頁面可以在指定來源的 frame 中展示

根據上述 X-Frame-Options的三個值描述,只要修改django的X-Frame-Options為SAMEORIGIN ,那麼相同功能變數名稱頁面就可以使用frame中展示。

3 功能

  • 點擊劫持保護

clickjacking中間件和裝飾器提供了易於使用的保護,以防止clickjacking。當惡意站點誘使用戶單擊他們已載入到隱藏框架或iframe中的另一個站點的隱藏元素時,會發生這種類型的攻擊。

  • 防止點擊劫持

現代瀏覽器採用X-Frame-Options HTTP標頭,該標頭指示是否允許在框架或iframe中載入資源。如果響應包含標頭值為的標頭,SAMEORIGIN則瀏覽器將僅在請求源自同一站點時才將資源載入到框架中。如果將標頭設置為,DENY則無論哪個站點發出請求,瀏覽器都將阻止資源載入到框架中。

 

三、在Django 中設置


在django3.0 版本中,預設開啟點擊劫持保護。Django 提供了幾種在您的網站響應中包含此標頭的方法:

  • 在所有響應中設置標頭的中間件。

  • 一組視圖裝飾器,可用於覆蓋中間件或僅為某些視圖設置標頭。

如果 X-Frame-OptionsHTTP 頭尚未在響應中出現,則僅由中間件或視圖裝飾器設置。

Django預設開啟點擊劫持保護

設置X-Frame-Options為所有響應

要X-Frame-Options為您站點中的所有響應設置相同的值,請在 setting.py 中 MIDDLEWARE 輸入 'django.middleware.clickjacking.XFrameOptionsMiddleware'

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

在生成的設置文件中啟用了該中間件 startproject。

預設情況下,中間件將為每個outgoing 將X-Frame-Options標頭設置 DENYHttpResponse

 

1 設置允許同功能變數名稱網站使用frme展示

預設情況下,中間件將為每個出站的HttpResponseX-Frame-Options頭設置為DENY

如果您希望此標頭的任何其他值,請設置X_FRAME_OPTIONS設置

# settings.py
X_FRAME_OPTIONS = 'SAMEORIGIN'

 

2 指定視圖函數不設置 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.")

 

3 指定視圖函數設置 X-Frame-Options

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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 效果演示圖 可拖拽側邊欄的使用情況非常多啊,博客園後臺管理左側邊欄就可以拖拽喲!廢話不多說,本隨筆實現的可拖拽側邊欄效果演示圖如下: HTML 代碼 <div class="container"> <div class="left"> <div class="resize-bar"></div> < ...
  • 前言 此文我首發於CSDN(所以裡面的圖片有它的水印) 趁著隔離梳理一下之前做的一個有用的功能:在瀏覽器中去切割多解析度瓦片圖 這是一個有趣的過程,跟我一起探索吧 閱讀本文需具備前置知識:對krpano有所瞭解,如:使用krpano去開發全景 本著故弄玄虛的原則,最精彩的會放到最後揭曉,由淺入深,層 ...
  • 淺學Vue 引入 <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> Hello Vue <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <s ...
  • ES6 部分 Typescript 部分 前端工程面經(節流防抖、https、前端攻擊、性能優化...) https://juejin.cn/post/6844903734464495623 ES6面試(點擊可展開) 為什麼選擇 ES6 ? ES6是新一代的 JS 語言標準,規範了JS的使用標準(v ...
  • CDN
    一、CDN的概念 概念:CDN(Content Delivery Network)是指一種通過互聯網互相連接的電腦網路系統,利用最靠近每位用戶的伺服器,更快、更可靠地將音樂、圖片、視頻、應用程式及其他文件發送給用戶,來提供高性能、可擴展性及低成本的網路內容傳遞給用戶。 即內容分髮網絡。 二、CDN的 ...
  • 有時需要在view頁面設置標簽的狀態為disabled,但是客戶反映radio button和checkbox的顏色很淺,難以識別,尤其是列印後,如下: 可以使用下麵的css更改原有的樣式input[type= "radio" ]:checked:disabled { appearance: non ...
  • 背景: 這兩天看了一個視頻,介紹什麼是C/S,什麼是B/S,總覺得很奇怪。裡面說到只要是app的,都是client-server,而網頁端,如h5網站,web網站,小程式等都是brower-server架構。感覺這種劃分非常“反直覺”,因為現在的軟體都是多端,連接在“同一個”伺服器下為使用者提供網路 ...
  • 一篇文章帶你掌握主流基礎框架——Spring 這篇文章中我們將會介紹Spring的框架以及本體內容,包括核心容器,註解開發,AOP以及事務等內容 那麼簡單說明一下Spring的必要性: Spring技術是JavaEE開發的必備技能,企業開發技術選型率高達90%! Spring可以幫助簡化開發,降低企 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...