django3整合django-mdeditor報 ‘X-Frame-Options‘ 錯誤
背景
使用django3進行開發時,由於專案前端頁面使用iframe框架,瀏覽器錯誤提示資訊如下:
Refused to display 'url' in a frame because it set 'X-Frame-Options' to 'deny'
根據提示資訊發現是因為X-Frame-Options=deny
導致的。
X-Frame-Options是什麼?
The X-Frame-Options HTTP
響應頭是用來給瀏覽器 指示允許一個頁面 可否在 <frame>
, <iframe>
, <embed>
或者 <object>
中展現的標記。站點可以通過確保網站沒有被嵌入到別人的站點裡面,從而避免點選劫持(clickjacking)攻擊。
語法:
X-Frame-Options
有三個值:
- DENY :表示該頁面不允許在 frame 中展示,即便是在相同域名的頁面中巢狀也不允許
- SAMEORIGIN :表示該頁面可以在相同域名頁面的 frame 中展示
- ALLOW-FROM uri :表示該頁面可以在指定來源的 frame 中展示
根據上述X-Frame-Options
的三個值描述,只要修改django
的X-Frame-Options為SAMEORIGIN
,那麼相同域名頁面就可以使用frame
中展示。
功能:
- 點選劫持保護
clickjacking
中介軟體和裝飾器提供了易於使用的保護,以防止clickjacking
。
當惡意站點誘使使用者單擊他們已載入到隱藏框架或iframe中的另一個站點的隱藏元素時,會發生這種型別的攻擊。
-
點選劫持的例子 假設線上商店有一個頁面,已登入的使用者可以在該頁面上單擊“立即購買”來購買商品。為了方便起見,使用者選擇一直保持登入狀態。攻擊者站點可能會在自己的一個頁面上建立一個“我喜歡小馬”按鈕,然後將商店的頁面載入到透明的iframe中,從而使“立即購買”按鈕以不可見的方式覆蓋在“我喜歡小馬”按鈕上。如果使用者訪問攻擊者的網站,則單擊“我喜歡小馬”會導致無意間單擊“立即購買”按鈕,並且在不知情的情況下購買了該物品。
-
防止點選劫持 現代瀏覽器採用
X-Frame-Options HTTP
標頭,該標頭指示是否允許在框架或iframe
中載入資源。如果響應包含標頭值為的標頭,SAMEORIGIN則瀏覽器將僅在請求源自同一站點時才將資源載入到框架中。如果將標頭設定為,DENY則無論哪個站點發出請求,瀏覽器都將阻止資源載入到框架中。
django中設定X-Frame-Options
在django3.0
版本中,預設開啟點選劫持保護,Django
提供了幾種在您的網站響應中包含此標頭的方法:
-
在所有響應中設定標頭的中介軟體。
-
一組檢視裝飾器,可用於覆蓋中介軟體或僅為某些檢視設定標頭。
如果X-Frame-OptionsHTTP
頭尚未在響應中出現,則僅由中介軟體或檢視裝飾器設定。
django預設開啟點選劫持保護
- 設定
X-Frame-Options
為所有響應開啟點選劫持保護,請在setting.py
中MIDDLEWARE
輸入:
MIDDLEWARE = [
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
django3.0 預設已經開啟該中介軟體!
預設情況下,中介軟體將為每個outgoing
將X-Frame-Options
標頭設定 DENY
為HttpResponse
。
設定允許同域名網站使用frame
展示,在專案的settings
中配置X_FRAME_OPTIONS
設定:
X_FRAME_OPTIONS = 'SAMEORIGIN'
基本上django安裝django-mdeditor上傳成功但編輯器前端無法顯示正確的url,報如標題所示錯誤,設定這個基本可以解決,如果還不能解決,那麼,最直接簡單粗暴的做法就是把這個中介軟體註釋掉,這個是以犧牲安全性為代價,不過個人後臺的話,我覺得無所謂!
指定檢視函式不設定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
Django提供了以下裝飾器:
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.")
- 註解
如果要提交表單或訪問框架或iframe
中的會話cookie
,則可能需要修改CSRF_COOKIE_SAMESITE
或 SESSION_COOKIE_SAMESITE
設定。 解決方法
X_FRAME_OPTIONS = 'SAMEORIGIN'
參考網址:
相關文章
- springboot整合Batis,執行報錯,資料庫連線密碼錯誤Spring BootBAT資料庫密碼
- 【ITOO】--Jekins整合錯誤集錦
- fckeditor 2.6 整合 appfuse 2.1 錯誤APP
- oracle 報大小寫錯誤Oracle
- jquery post 報404錯誤jQuery
- springboot整合mina報錯Spring Boot
- 專案整合Swagger遇到的錯誤Swagger
- dbfread報錯ValueError錯誤解決方法Error
- navicat 建立事件報語法錯誤事件
- react元件內報implementation()方法錯誤!React元件
- Elasticsearch報Call to undefined xx makeAllSearchable()錯誤ElasticsearchUndefined
- Apache Hive啟動報NoClassDefFoundError錯誤ApacheHiveError
- Django3使用WebSocket實現WebShellDjangoWebshell
- Qt報Multiple definition錯誤的解決QT
- laravel mysql批量提交報Access denied 錯誤LaravelMySql
- linux安裝thefuck報gcc錯誤LinuxGC
- springMVC下前端ajax報404錯誤SpringMVC前端
- mysql執行命令報segmentation fault 錯誤MySqlSegmentation
- nginx設定X-Frame-OptionsNginx
- 菜鳥調錯(四)——Spring與DWR整合,配置檔案報錯Spring
- mysql報1045錯誤是什麼意思MySql
- Laravel 安裝後報 500 和 404 錯誤Laravel
- win10 關閉自動傳送錯誤報告方法 windows10錯誤報告怎麼關閉Win10Windows
- Win10系統怎麼禁用錯誤報告 禁用win10系統微軟錯誤報告的方法Win10微軟
- tasklist 遠端獲取程式報錯賬號密碼錯誤密碼
- hibernate錯誤No CurrentSessionContext configured! Junit測試報錯SessionContext
- 很奇怪的jsp錯誤,大家試試看報錯不JS
- SAP系統合併後整合:應避免的4個錯誤
- IPMI報jnlp錯誤,無法開啟java程式Java
- 使用Boost庫報error C4996錯誤Error996
- hive報system:java.io.tmpdir錯誤解決HiveJava
- MySQL過程報 Parameter number N is not an OUT parameter錯誤MySql
- pip報importError錯誤的一些情況ImportError
- 安裝Oracle軟體報主機名錯誤Oracle
- shell報錯:未預期的符號***附近有語法錯誤符號
- ef8 Contains 查詢條件 報錯 $ 附近錯誤AI
- win10系統出現錯誤報告怎麼辦 win10電腦提示錯誤報告解決方法Win10
- Spring Boot整合Swagger報錯:"this.condition" is nullSpring BootSwaggerNull