点击劫持保护

点击劫持中间件和装饰器提供了简捷易用的,对点击劫持的保护。这种攻击在恶意站点诱导用户点击另一个站点的被覆盖元素时出现,另一个站点已经加载到了隐藏的frameiframe中。

点击劫持的示例

假设一个在线商店拥有一个页面,已登录的用户可以点击“现在购买”来购买一个商品。用户为了方便,可以选择一直保持商店的登录状态。一个攻击者的站点可能在他们自己的页面上会创建一个“我喜欢Ponies”的按钮,并且在一个透明的iframe中加载商店的页面,把“现在购买”的按钮隐藏起来覆盖在“我喜欢Ponies”上。如果用户访问了攻击者的站点,点击“我喜欢Ponies”按钮会触发对“现在购买”按钮的无意识的点击,不知不觉中购买了商品。

点击劫持的防御

现代浏览器遵循X-Frame-Options协议头,它表明一个资源是否允许加载到frame或者iframe中。如果响应包含值为SAMEORIGIN的协议头,浏览器会在frame中只加载同源请求的的资源。如果协议头设置为DENY,浏览器会在加载frame时屏蔽所有资源,无论请求来自于哪个站点。

Django提供了一些简单的方法来在你站点的响应中包含这个协议头:

  • 一个简单的中间件,在所有响应中设置协议头。
  • 一系列的视图装饰器,可以用于覆盖中间件,或者只用于设置指定视图的协议头。

如何使用

为所有响应设置X-Frame-Options

要为你站点中所有的响应设置相同的X-Frame-Options值,将'django.middleware.clickjacking.XFrameOptionsMiddleware'设置为 MIDDLEWARE_CLASSES

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

这个中间件可以在startproject生成的设置文件中开启。

通常,这个中间件会为任何开放的HttpResponse设置X-Frame-Options协议头为SAMEORIGIN。如果你想用 DENY来替代它,要设置X_FRAME_OPTIONS

X_FRAME_OPTIONS = 'DENY'

使用这个中间件时可能会有一些视图,你并不想为它设置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提供了以下装饰器来为每个基础视图设置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.")

注意你可以在中间件的连接中使用装饰器。使用装饰器来覆盖中间件。

限制

X-Frame-Options协议头只在现代浏览器中保护点击劫持。老式的浏览器会忽视这个协议头,并且需要 其它点击劫持防范技巧。

支持 X-Frame-Options 的浏览器

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

另见

浏览器对X-Frame-Options支持情况的完整列表。

译者:Django 文档协作翻译小组,原文:Clickjacking protection。

本文以 CC BY-NC-SA 3.0 协议发布,转载请保留作者署名和文章出处。

Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。

django 1.8 官方文档翻译: 8-3 点击劫持保护相关推荐

  1. django 1.8 官方文档翻译: 8-3 点击劫持保护 1

    点击劫持保护 点击劫持中间件和装饰器提供了简捷易用的,对点击劫持的保护.这种攻击在恶意站点诱导用户点击另一个站点的被覆盖元素时出现,另一个站点已经加载到了隐藏的frame或iframe中. 点击劫持的 ...

  2. django 1.8 官方文档翻译: 3-6-2 内建的中间件

    Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质. 交流群:467338606 网站:http://python.usyiyi.cn/django/index.html ...

  3. django 1.8 官方文档翻译: 2-5-7 自定义查找

    自定义查找 New in Django 1.7. Django为过滤提供了大量的内建的查找(例如,exact和icontains).这篇文档阐述了如何编写自定义查找,以及如何修改现存查找的功能.关于查 ...

  4. django 1.8 官方文档翻译: 2-5-6 多数据库

    多数据库 这篇主题描述Django 对多个数据库的支持.大部分Django 文档假设你只和一个数据库打交道.如果你想与多个数据库打交道,你将需要一些额外的步骤. 定义你的数据库 在Django中使用多 ...

  5. django 1.8 官方文档翻译: 1-1-2 快速安装指南

    快速安装指南 在你开始使用 Django 之前,你需要先安装它.我们有一个 完整安装指南 它涵盖了所有的安装步骤和可能遇到的问题:本指南将会给你一个最简单.简洁的安装指引. 安装 Python 作为一 ...

  6. django 1.8 官方文档翻译: 3-4-2 基于类的内建通用视图

    基于类的内建通用视图 编写Web应用可能是单调的,因为你需要不断的重复某一种模式. Django尝试从model和 template层移除一些单调的情况,但是Web开发者依然会在view(视图)层经历 ...

  7. django 1.8 官方文档翻译:2-5-9 条件表达式

    条件表达式 New in Django 1.8. 条件表达式允许你在过滤器.注解.聚合和更新操作中使用 if ... elif ... else的逻辑.条件表达式为表中的每一行计算一系列的条件,并且返 ...

  8. django 1.8 官方文档翻译:8-5 加密签名

    加密签名 web应用安全的黄金法则是,永远不要相信来自不可信来源的数据.有时通过不可信的媒介来传递数据会非常方便.密码签名后的值可以通过不受信任的途径传递,这样是安全的,因为任何篡改都会检测的到. D ...

  9. django 1.8 官方文档翻译: 3-4-2 内建显示视图

    Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质. 交流群:467338606 网站:http://python.usyiyi.cn/django/index.html ...

最新文章

  1. 公路图和地铁图有什么区别?
  2. Tomcat 的 catalina.out 日志分割
  3. python 文件读写模式r,r+,w,w+,a,a+的区别(附代码示例)
  4. 我国身家超过亿元的有多少人?
  5. Django REST framework 认证、权限和频率组件
  6. hadoop 二次开发DatanodeWriteTimeout设置
  7. 华为P40pro 手机云台_2020年目前拍照最好的手机推荐!华为P40 Pro!DXO全球榜首
  8. nginx ---- 目录结构
  9. free、vmstat监视内存使用情况
  10. HTML5 学习准备1
  11. c语言刷屏函数的作用是什么,刷屏神器源码(C语言控制台版)【原创】
  12. office增加自定义文档模板
  13. IDEA切换使用的语言
  14. 学一级计算机需多久啊,BIM一级考试通关需要花多久来准备?
  15. 百度祝恒书:百度智能招聘技术和应用实践
  16. 破解物联网落地困境-阿里云硬件接入最佳实践
  17. EBS 个性化:个性化设置界面
  18. 华为p30pro鸿蒙悟空,华为新广告《悟空》火了,竟是华为P30Pro拍的?
  19. LCD-QC1602A v2.0
  20. 零基础入门CV - Task 03 字符识别模型.md

热门文章

  1. (32)SystemVerilog语言编写打两拍
  2. 命令查看mysql端口映射_【转载】烂泥:如何利用telnet命令检测端口映射是否成功...
  3. 三丰三坐标编程基本步骤_加工中心开机回零的两种基本方式及常见问题的应对方法...
  4. python编辑器中文字体倒立的_如何用Python+人工识别处理知乎的倒立汉字验证码...
  5. PID算法的EXCEL模拟实现
  6. android 盒子刷 下载,一加5刷机盒子
  7. 数字图像处理(三)——频域滤波
  8. python读取读excel,日期变成了数字,解决方法记录
  9. JVM&NIO&HashMap简单问
  10. 梯度下降、随机梯度下降、方差减小的梯度下降(matlab实现)