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 标签

最新文章

  1. objective-c(代码块)
  2. linker command failed with exit code 1 (use -v to see invocation)
  3. ACM Arithmetic Expression
  4. session跟cookies区别
  5. C++:对象指针
  6. Servlet一些基础
  7. angular4.0单个标签不能同时使用ngFor和ngIf
  8. 02_3中方式的反射,通过Class.forName获得Class对象,通过类.class获得字节码对象,通过类实例.getClass()的方式获得Class对象
  9. iOS---------获取当前年份
  10. Checked Exceptions
  11. Java -- JDBC 学习--通过Statement进行数据库更新操作
  12. python 详解正则表达式的使用(re模块)
  13. SQLServer 数据库镜像+复制切换方案
  14. Android Studio 解决Fetching android sdk component information加载过久问题
  15. Luogu 3806 点分治1
  16. Magento 2开发教程 - 如何添加新产品属性
  17. 《深入理解Linux网络技术内幕》阅读笔记 --- 邻居子系统
  18. C语言排序算法之简单交换法排序,直接选择排序,冒泡排序
  19. 用html5(requestFullscreen) js实现点击一个按钮使浏览器全屏效果
  20. 2018.7.2 AK22 不良品分析

热门文章

  1. Win 7 Windows Update无法自动更新解决方案
  2. PreparedStatement的setDate方法如何设置日期
  3. wireshark问题
  4. C#延迟执行
  5. VMware vSphere之vCenter
  6. mybatis 简单实现 left join
  7. redis整理の主从复制
  8. AI_图像识别
  9. ZKEACMS 配置使用 HTTPS
  10. System Workbench for STM32(based on Eclipse)开发环境配置