Django中的CSRF(跨站请求伪造)

Django CSRF 

什么是CSFR

即跨站请求伪装,就是通常所说的钓鱼网站。
钓鱼网站的页面和正经网站的页面对浏览器来说有什么区别? (页面是怎么来的?)
钓鱼网站的页面是由 钓鱼网站的服务端给你返回的

正经网站的网页是由 正经网站的服务端给你返回的

CSFR示例

模拟钓鱼网站中的转账操作
通常用户在正规网站进行转账操作,网页页面由正规网站服务端提供,数据返回到正规网站的服务端,而钓鱼网站页面与正规网站页面无异,但是会将用户输入的数据进行修改后返回到正规网站的服务端。

正规网站的页面代码

<form action="/transfer/" method="post">
<p>
转账人:
<input type="text" name="from">
</p> <p>
收款人:
<inputtype="text"name="to">
</p> <p>
金额:
<input type="text" name="money">
</p> <p>
<input type="submit" value="转账">
</p>
</form>

注意: 正规网站的 form 表单中的action自然是返回给自己

钓鱼网站的页面代码

  1. <formaction="http://127.0.0.1:8000/transfer/"method="post"> 

  2. <p> 

  3. 转账人: 

  4. <input type="text" name="from"> 

  5. </p> 


  6. <p> 

  7. 收款人: 

  8. <inputtype="text"name=""> 

  9. <inputtype="text"name="to"value="bad_guy"style="display: none"> 

  10. </p> 


  11. <p> 

  12. 金额: 

  13. <input type="text" name="money"> 

  14. </p> 


  15. <p> 

  16. <input type="submit" value="转账"> 

  17. </p> 

  18. </form> 

注意:

  1. 在钓鱼网站的 form 表单中将 action 设置的是正规网站的链接地址。
  2. 代码的第 9 10 行是关键所在,通过设置一个不可见的 input 标签来更改返回到正规网站服务端的数据。

Django 的应对措施

Django中内置了一个专门处理csrf问题的中间件

django.middleware.csrf.CsrfViewMiddleware

使用方式

在页面上 form 表单里面写上

{% csrf_token %}

例如:

<form action="/transfer/" method="post">
{% csrf_token %}
<p>
转账人:
<input type="text" name="from">
</p> <p>
收款人:
<input type="text" name="to">
</p> <p>
金额:
<input type="text" name="money">
</p> <p>
<input type="submit" value="转账">
</p>
</form>

这个中间件做的事情:

  1. 在render返回页面的时候,在页面中塞了一个隐藏的input标签
  2. 当提交POST数据的时候,它帮你做校验,如果校验不通过就拒绝这次请求

csfr添加的隐藏的 input 标签

Django中的CSRF(跨站请求伪造)的更多相关文章

  1. 第三百一十五节,Django框架,CSRF跨站请求伪造

    第三百一十五节,Django框架,CSRF跨站请求伪造  全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.midd ...

  2. Web框架之Django重要组件(Django中间件、csrf跨站请求伪造)

    Web框架之Django_09 重要组件(Django中间件.csrf跨站请求伪造)   摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是 ...

  3. 十三 Django框架,CSRF跨站请求伪造

     全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMidd ...

  4. Web框架之Django_09 重要组件(Django中间件、csrf跨站请求伪造)

    摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于 ...

  5. django 中间键 csrf 跨站请求伪造

    django中间件和auth模块   Django中间件 由django的生命周期图我们可以看出,django的中间件就类似于django的保安,请求一个相应时要先通过中间件才能到达django后端( ...

  6. Django之CSRF 跨站请求伪造

    一.简介 1.点我了解什么是跨站请求伪造 2.django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成.而对 ...

  7. csrf 跨站请求伪造相关以及django的中间件

    django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware来完成. 1.django中常用的中间件? - proces ...

  8. Django框架 之 基于Ajax中csrf跨站请求伪造

    Django框架 之 基于Ajax中csrf跨站请求伪造 ajax中csrf跨站请求伪造 方式一 1 2 3 $.ajaxSetup({     data: {csrfmiddlewaretoken: ...

  9. ajax向Django前后端提交请求和CSRF跨站请求伪造

    1.ajax登录示例 urls.py from django.conf.urls import url from django.contrib import admin from app01 impo ...

随机推荐

  1. [BAT] 通过批处理加host

    echo. >> %WINDIR%\system32\drivers\etc\hosts & echo xxx.xxx.xxx.xx test_host >> %WIN ...

  2. OracleBulkCopy 修正帮

    using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Refle ...

  3. HBase预分区方法

    (what)什么是预分区? HBase表在刚刚被创建时,只有1个分区(region),当一个region过大(达到hbase.hregion.max.filesize属性中定义的阈值,默认10GB)时 ...

  4. Hive入门学习随笔(二)

    ====使用Load语句执行数据的导入 --将操作系统上的文件student01.txt数据导入到t2表中 load data local inpath '/root/data/student01.t ...

  5. PHP Windows系统下调用OpenOffice

    项目需要把用户上传的word文档转换为pdf文件,方便用户浏览.经过谷歌百度找到PHP可以使用COM组件调用微软的openoffice来实现文档转换 1,安装OpenOffice 安装OpenOffi ...

  6. 基于maven从头搭建springMVC框架

    0.准备工作 首先将eclipse和需要的插件准备好,例如maven插件,spring IDE插件. 1.建立maven下的webapp项目 1.新建一个maven项目,类型为webapp,如下图 2 ...

  7. mysql数据库引擎MyISAM与InnoDB的区别浅说

    mysql的存储引擎包括:MyISAM.InnoDB.BDB.MEMORY.MERGE.EXAMPLE.NDBCluster.ARCHIVE.CSV.BLACKHOLE.FEDERATED等,其中In ...

  8. 谷歌浏览器插件开发入门-官方版Helloworld详解

    目录: 需求 原理 实现步骤: 一个空的插件 一个可以设置一种背景色的插件(可以设置百度首页的背景色为绿色) 一个可以设置多种背景色的插件 需求: 插件可以改变特定网址的背景颜色. 原理: 将各种ht ...

  9. 直接通过Response输出流写文件,浏览器表现为下载文件

    response.setContentType("application/x-download"); response.addHeader("Content-Dispos ...

  10. django 'set' object does not support indexing

    在定义Model之后使用syncdb 同步的时候报出这个错误,检查之后发现是用错了.在model的Meta里面,排序这些用的应该是 ordering = ['last','first','middle ...