Django从理论到实战(part53)--CSRF攻击
学习笔记,仅供参考,有错必纠
摘自:某网课笔记
文章目录
- 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_token
和body
中的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 token
的input
标签:{% csrf_token %}
Django从理论到实战(part53)--CSRF攻击相关推荐
- Django从理论到实战(part25)--数据库操作
学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...
- Django从理论到实战(part22)--include模板标签
学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...
- Django从理论到实战(part21)--自定义模板过滤器
学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...
- Django从理论到实战(part55)--将网站上传到GitHub
代码笔记,仅供参考 文章目录 上传项目到GitHub 创建本地仓库 在GitHub上创建仓库 项目上传 上传项目到GitHub 创建本地仓库 我们在git bash中敲入如下代码. 进入项目目录: c ...
- Django从理论到实战(part54)--MEDIA_ROOT和MEDIA_URL
学习笔记,仅供参考,有错必纠 引用:使用模型来处理上传的文件:Django static静态配置文件 MEDIA_ROOT和MEDIA_URL 变量解释 MEDIA_ROOT:指定用户上传文件的本地路 ...
- Django从理论到实战(part52)--登录、注销及登录限制
学习笔记,仅供参考,有错必纠 文章目录 登录.注销及登录限制 登录 注销 登录限制 登录.注销及登录限制 登录 在使用authenticate进行验证后,如果验证通过了.那么会返回一个user对象,拿 ...
- Django从理论到实战(part51)--User模型
学习笔记,仅供参考,有错必纠 摘自:pink老师教案 文章目录 User模型 字段 User模型的基本用法 创建用户 创建超级用户 修改密码 登录验证 User模型 User模型是Django框架的核 ...
- Django从理论到实战(part50)--使用模型来处理上传的文件
学习笔记,仅供参考,有错必纠 文章目录 使用模型来处理上传的文件 `MEDIA_ROOT`和`MEDIA_URL` 限制文件的扩展名 使用模型来处理上传的文件 在定义模型的时候,我们可以给存储文件的字 ...
- Django从理论到实战(part49)--ModelForm
学习笔记,仅供参考,有错必纠 参考自:某网课 ModelForm 我门在写表单的时候,会发现表单中的Field和模型中的Field基本上是一模一样的,而且表单中需要验证的数据,也就是我们模型中需要保存 ...
最新文章
- python17个常见问题_17个Python 常见错误的分析,你都遇到过哪些?
- 互斥事件的概念和公式_IGCSE数学5月大考冲刺A*?必备公式与技巧
- WM的Image格式分析
- sort redis php,php-redis中的sort排序函数总结
- sparkR介绍及安装
- 通过实例学习编写需求文档 【转】
- Atitit.判断汉字的编码 regedit 注册表里面的reg_sz
- centos7安装tomcat9过程
- HSPICE求导语句
- Evasion 使用及实际免杀测试
- Python为什么这些年在编程语言排行榜上一直上升?告诉你11个原因
- 土木/岩土期刊版面费/审稿费统计列表
- 5 个市值较小的去中心化游戏
- 美团外卖token解密(Java版)
- 普歌-飞灵团队-nuxt中jQuery报e.indexOf is not a function错误
- android 支付sdk ----libPaySdk
- Typescript类,泛型,各种类型工具
- ant man什么意思_ant是什么意思_ant翻译_读音_用法_翻译
- 智慧社区系统开发,智慧社区平台搭建解决方案
- Nodejs+socket.io 搭建个人的网页聊天室