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. 修改字段名change

    ALTER TABLE tc_activity_miaosha_item CHANGE `batch_id` `movie_batch_id` INT () NOT NULL DEFAULT ' CO ...

  2. Google-优秀移动站点设计10招

    Google-优秀移动网站设计10招 1)添加一个醒目的搜索条:在移动终端上,人们希望能够快速找到自己需要的东西 2)把大表格拆分成小块:别搞一个长长的表格页面,上面包含各种输入框 3)允许用户匿名浏 ...

  3. HDU 4756 Install Air Conditioning (MST+树形DP)

    题意:n-1个宿舍,1个供电站,n个位置每两个位置都有边相连,其中有一条边不能连,求n个位置连通的最小花费的最大值. 析:因为要连通,还要权值最小,所以就是MST了,然后就是改变一条边,然后去找出改变 ...

  4. 回归(regression)、梯度下降(gradient descent)

    本文由LeftNotEasy所有,发布于http://leftnoteasy.cnblogs.com.如果转载,请注明出处,在未经作者同意下将本文用于商业用途,将追究其法律责任. 前言: 上次写过一篇 ...

  5. CentOS中安装Java环境 jdk

      一.  在CentOS中只需要先移除自带的OpenJava,再安装原生的Java SDK.   <1> rpm -qa | grep jdk: 也就是query all npm 包,找 ...

  6. 详解C#中的反射(转发)

    https://www.cnblogs.com/Stephenchao/p/4481995.html 两个现实中的例子:1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况 ...

  7. UML uml建模工具

    UML建模工具 一.UML的概念: 参考百度百科: https://baike.baidu.com/item/%E7%BB%9F%E4%B8%80%E5%BB%BA%E6%A8%A1%E8%AF%AD ...

  8. oracle-01427

    Oracle / PLSQL: ORA-01427 Learn the cause and how to resolve the ORA-01427 error message in Oracle. ...

  9. Charles弱网测试

    当前APP网络环境比较复杂,网络制式有2G.3G.4G网络,还有越来越多的公共Wi-Fi.不同的网络环境和网络制式的差异,都会对用户使用app造成一定影响.另外,当前app使用场景多变,如进地铁.上公 ...

  10. codeforces|CF13C Sequence

    大概的题意就是每次可以对一个数加一或者减一,然后用最小的代价使得原序列变成不下降的序列. 因为是最小的代价,所以到最后的序列中的每个数字肯定在原先的序列中出现过.(大家可以想一下到底是为什么,或者简单 ...