在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 點(diǎn)擊劫持保護(hù)
編寫自定義存儲(chǔ)系統(tǒng)
高級(jí)
編寫你的第一個(gè)Django應(yīng)用,第5部分
視圖層
Django管理文檔生成器
編寫你的第一個(gè) Django 程序 第3部分
編寫你的第一個(gè)Django應(yīng)用,第6部分
模型層
中間件
測(cè)試
數(shù)據(jù)庫(kù)訪問(wèn)優(yōu)化
文件上傳
中間件
驗(yàn)證器
基于類的內(nèi)建通用視圖
部署靜態(tài)文件
使用Django認(rèn)證系統(tǒng)
高級(jí)教程:如何編寫可重用的應(yīng)用
Model 類參考
Django 初探
使用Django輸出PDF
模型的實(shí)例
模型
文件上傳
進(jìn)行原始的sql查詢
面向程序員
中間件
編寫數(shù)據(jù)庫(kù)遷移
TemplateResponse 和 SimpleTemplateResponse
異常
Django中的測(cè)試
基礎(chǔ)
管理器
File對(duì)象
URL調(diào)度器
加密簽名
國(guó)際化和本地化
日志
查詢集
django-admin 和 manage.py
使用基于類的視圖處理表單
聚合
內(nèi)建基于類的視圖的API
如何使用會(huì)話
部署 Django
其它
其它核心功能
高級(jí)
Django中的密碼管理
模型元選項(xiàng)
按需內(nèi)容處理
查找 API 參考
高級(jí)
Django 的快捷函數(shù)
Django 的設(shè)置
Admin
開發(fā)過(guò)程
新手入門
基于類的視圖
模型實(shí)例參考
信號(hào)
表單素材 ( <code>Media</code> 類)
自定義查找
常見的網(wǎng)站應(yīng)用工具
模型
django.contrib.humanize
Django模版語(yǔ)言
點(diǎn)擊劫持保護(hù)
管理操作
編寫你的第一個(gè) Django 程序 第2部分
Django安全
模式編輯器
多數(shù)據(jù)庫(kù)
部署
基于類的視圖
內(nèi)建的視圖
視圖裝飾器
面向設(shè)計(jì)師
編寫視圖
應(yīng)用程序
如何使用WSGI 部署
參考
表單 API
文件儲(chǔ)存API
認(rèn)證
國(guó)際化和本地化
錯(cuò)誤報(bào)告
基礎(chǔ)
基礎(chǔ)
將遺留數(shù)據(jù)庫(kù)整合到Django
教程
Django異常
編寫你的第一個(gè) Django 程序 第4部分
遷移
分頁(yè)
重定向應(yīng)用
表單
從零開始
為模型提供初始數(shù)據(jù)
設(shè)置
使用Django輸出CSV
關(guān)聯(lián)對(duì)象參考
使用表單
Django 中的用戶認(rèn)證
快速安裝指南
安全問(wèn)題歸檔
數(shù)據(jù)庫(kù)函數(shù)
編寫自定義的django-admin命令
高級(jí)教程
管理文件
格式本地化
基于類的通用視圖 —— 索引
安全
系統(tǒng)檢查框架
為Django編寫首個(gè)補(bǔ)丁
模板層
Widgets
編寫你的第一個(gè) Django 程序 第1部分
執(zhí)行查詢

點(diǎn)擊劫持保護(hù)

點(diǎn)擊劫持中間件和裝飾器提供了簡(jiǎn)捷易用的,對(duì)點(diǎn)擊劫持的保護(hù)。這種攻擊在惡意站點(diǎn)誘導(dǎo)用戶點(diǎn)擊另一個(gè)站點(diǎn)的被覆蓋元素時(shí)出現(xiàn),另一個(gè)站點(diǎn)已經(jīng)加載到了隱藏的frameiframe中。

點(diǎn)擊劫持的示例

假設(shè)一個(gè)在線商店擁有一個(gè)頁(yè)面,已登錄的用戶可以點(diǎn)擊“現(xiàn)在購(gòu)買”來(lái)購(gòu)買一個(gè)商品。用戶為了方便,可以選擇一直保持商店的登錄狀態(tài)。一個(gè)攻擊者的站點(diǎn)可能在他們自己的頁(yè)面上會(huì)創(chuàng)建一個(gè)“我喜歡Ponies”的按鈕,并且在一個(gè)透明的iframe中加載商店的頁(yè)面,把“現(xiàn)在購(gòu)買”的按鈕隱藏起來(lái)覆蓋在“我喜歡Ponies”上。如果用戶訪問(wèn)了攻擊者的站點(diǎn),點(diǎn)擊“我喜歡Ponies”按鈕會(huì)觸發(fā)對(duì)“現(xiàn)在購(gòu)買”按鈕的無(wú)意識(shí)的點(diǎn)擊,不知不覺(jué)中購(gòu)買了商品。

點(diǎn)擊劫持的防御

現(xiàn)代瀏覽器遵循X-Frame-Options協(xié)議頭,它表明一個(gè)資源是否允許加載到frame或者iframe中。如果響應(yīng)包含值為SAMEORIGIN的協(xié)議頭,瀏覽器會(huì)在frame中只加載同源請(qǐng)求的的資源。如果協(xié)議頭設(shè)置為DENY,瀏覽器會(huì)在加載frame時(shí)屏蔽所有資源,無(wú)論請(qǐng)求來(lái)自于哪個(gè)站點(diǎn)。

Django提供了一些簡(jiǎn)單的方法來(lái)在你站點(diǎn)的響應(yīng)中包含這個(gè)協(xié)議頭:

  • 一個(gè)簡(jiǎn)單的中間件,在所有響應(yīng)中設(shè)置協(xié)議頭。
  • 一系列的視圖裝飾器,可以用于覆蓋中間件,或者只用于設(shè)置指定視圖的協(xié)議頭。

如何使用

為所有響應(yīng)設(shè)置X-Frame-Options

要為你站點(diǎn)中所有的響應(yīng)設(shè)置相同的X-Frame-Options值,將'django.middleware.clickjacking.XFrameOptionsMiddleware'設(shè)置為 MIDDLEWARE_CLASSES

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

這個(gè)中間件可以在startproject生成的設(shè)置文件中開啟。

通常,這個(gè)中間件會(huì)為任何開放的HttpResponse設(shè)置X-Frame-Options協(xié)議頭為SAMEORIGIN。如果你想用 DENY來(lái)替代它,要設(shè)置X_FRAME_OPTIONS

X_FRAME_OPTIONS = 'DENY'

使用這個(gè)中間件時(shí)可能會(huì)有一些視圖,你并不想為它設(shè)置X-Frame-Options協(xié)議頭。對(duì)于這些情況,你可以使用一個(gè)視圖裝飾器來(lái)告訴中間件不要設(shè)置協(xié)議頭:

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

為每個(gè)視圖設(shè)置 X-Frame-Options

Django提供了以下裝飾器來(lái)為每個(gè)基礎(chǔ)視圖設(shè)置X-Frame-Options協(xié)議頭。

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

注意你可以在中間件的連接中使用裝飾器。使用裝飾器來(lái)覆蓋中間件。

限制

X-Frame-Options協(xié)議頭只在現(xiàn)代瀏覽器中保護(hù)點(diǎn)擊劫持。老式的瀏覽器會(huì)忽視這個(gè)協(xié)議頭,并且需要 其它點(diǎn)擊劫持防范技巧。

支持 X-Frame-Options 的瀏覽器

  • Internet Explorer 8+
  • Firefox 3.6.9+
  • Opera 10.5+
  • Safari 4+
  • Chrome 4.1+

另見

瀏覽器對(duì)X-Frame-Options支持情況的完整列表。

譯者:Django 文檔協(xié)作翻譯小組,原文:Clickjacking protection。

本文以 CC BY-NC-SA 3.0 協(xié)議發(fā)布,轉(zhuǎn)載請(qǐng)保留作者署名和文章出處。

Django 文檔協(xié)作翻譯小組人手緊缺,有興趣的朋友可以加入我們,完全公益性質(zhì)。交流群:467338606。