学习笔记,仅供参考,有错必纠

摘自:某网课笔记


文章目录

  • CSRF攻击
    • CSRF攻击概述
    • CSRF攻击原理
    • 防御CSRF攻击

CSRF攻击

CSRF攻击概述

CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一。其他安全隐患,比如 SQL 脚本注入,跨站域脚本攻击等在近年来已经逐渐为众人熟知,很多网站也都针对他们进行了防御。然而,对于大多数人来说,CSRF 却依然是一个陌生的概念。即便是大名鼎鼎的 Gmail, 在 2007 年底也存在着 CSRF 漏洞,从而被黑客攻击而使 Gmail 的用户造成巨大的损失。

CSRF攻击原理

网站是通过cookie来实现登录功能的。而cookie只要存在浏览器中,那么浏览器在访问这个cookie的服务器的时候,就会自动的携带cookie信息到服务器上去。那么这时候就存在一个漏洞了,如果你访问了一个别有用心或病毒网站,这个网站可以在网页源代码中插入js代码,使用js代码给其他服务器发送请求(比如ICBC的转账请求)。那么因为在发送请求的时候,浏览器会自动的把cookie发送给对应的服务器,这时候相应的服务器(比如ICBC网站),就不知道这个请求是伪造的,就被欺骗过去了。从而达到在用户不知情的情况下,给某个服务器发送了一个请求(比如转账)。

防御CSRF攻击

CSRF攻击的要点就是在向服务器发送请求的时候,相应的cookie会自动的发送给对应的服务器。造成服务器不知道这个请求是用户发起的还是伪造的。这时候,我们可以在用户每次访问有表单的页面的时候,在网页源代码中加一个随机的字符串叫做csrf_token,在cookie中也加入一个相同值的csrf_token字符串。以后给服务器发送请求的时候,必须在body中以及cookie中都携带csrf_token,服务器只有检测到cookie中的csrf_tokenbody中的csrf_token都相同,才认为这个请求是正常的,否则就是伪造的。那么黑客就没办法伪造请求了。在Django中,如果想要防御CSRF攻击,应该做两步工作。第一个是在settings.MIDDLEWARE中添加CsrfMiddleware中间件。第二个是在模版代码中添加一个input标签,加载csrf_token。示例代码如下:

  • 服务器代码:

    MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.middleware.gzip.GZipMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware'
    ]
    
  • 模版代码:

    <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}"/>
    

    或者是直接使用csrf_token标签,来自动生成一个带有csrf tokeninput标签:

    {% csrf_token %}
    

Django从理论到实战(part53)--CSRF攻击相关推荐

  1. Django从理论到实战(part25)--数据库操作

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...

  2. Django从理论到实战(part22)--include模板标签

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...

  3. Django从理论到实战(part21)--自定义模板过滤器

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...

  4. Django从理论到实战(part55)--将网站上传到GitHub

    代码笔记,仅供参考 文章目录 上传项目到GitHub 创建本地仓库 在GitHub上创建仓库 项目上传 上传项目到GitHub 创建本地仓库 我们在git bash中敲入如下代码. 进入项目目录: c ...

  5. Django从理论到实战(part54)--MEDIA_ROOT和MEDIA_URL

    学习笔记,仅供参考,有错必纠 引用:使用模型来处理上传的文件:Django static静态配置文件 MEDIA_ROOT和MEDIA_URL 变量解释 MEDIA_ROOT:指定用户上传文件的本地路 ...

  6. Django从理论到实战(part52)--登录、注销及登录限制

    学习笔记,仅供参考,有错必纠 文章目录 登录.注销及登录限制 登录 注销 登录限制 登录.注销及登录限制 登录 在使用authenticate进行验证后,如果验证通过了.那么会返回一个user对象,拿 ...

  7. Django从理论到实战(part51)--User模型

    学习笔记,仅供参考,有错必纠 摘自:pink老师教案 文章目录 User模型 字段 User模型的基本用法 创建用户 创建超级用户 修改密码 登录验证 User模型 User模型是Django框架的核 ...

  8. Django从理论到实战(part50)--使用模型来处理上传的文件

    学习笔记,仅供参考,有错必纠 文章目录 使用模型来处理上传的文件 `MEDIA_ROOT`和`MEDIA_URL` 限制文件的扩展名 使用模型来处理上传的文件 在定义模型的时候,我们可以给存储文件的字 ...

  9. Django从理论到实战(part49)--ModelForm

    学习笔记,仅供参考,有错必纠 参考自:某网课 ModelForm 我门在写表单的时候,会发现表单中的Field和模型中的Field基本上是一模一样的,而且表单中需要验证的数据,也就是我们模型中需要保存 ...

最新文章

  1. python17个常见问题_17个Python 常见错误的分析,你都遇到过哪些?
  2. 互斥事件的概念和公式_IGCSE数学5月大考冲刺A*?必备公式与技巧
  3. WM的Image格式分析
  4. sort redis php,php-redis中的sort排序函数总结
  5. sparkR介绍及安装
  6. 通过实例学习编写需求文档 【转】
  7. Atitit.判断汉字的编码 regedit 注册表里面的reg_sz
  8. centos7安装tomcat9过程
  9. HSPICE求导语句
  10. Evasion 使用及实际免杀测试
  11. Python为什么这些年在编程语言排行榜上一直上升?告诉你11个原因
  12. 土木/岩土期刊版面费/审稿费统计列表
  13. 5 个市值较小的去中心化游戏
  14. 美团外卖token解密(Java版)
  15. 普歌-飞灵团队-nuxt中jQuery报e.indexOf is not a function错误
  16. android 支付sdk ----libPaySdk
  17. Typescript类,泛型,各种类型工具
  18. ant man什么意思_ant是什么意思_ant翻译_读音_用法_翻译
  19. 智慧社区系统开发,智慧社区平台搭建解决方案
  20. Nodejs+socket.io 搭建个人的网页聊天室

热门文章

  1. 4-3 数据离散化(无error版本)
  2. C++Primer模板
  3. OpenGL uniform变量赋值的三种方法
  4. OpenCV学习笔记七-创建滑动条
  5. 困难时拉你一把的图片_2019早上好表情图片合集 早晨祝福语动画
  6. idea 修改Git密码和账号方法
  7. ORACLE IMP-00017: following statement failed with ORACLE error 6550
  8. Linux环境下服务器 Tomcat war包部署步骤
  9. iOS 采集音视频及写入文件
  10. es6中新增对象的特性和方法