Django之CSRF跨站请求伪造(老掉牙的钓鱼网站模拟)
首先这是一个测试的代码
请先在setting页面进行下面操作
注释完成后,开始模拟钓鱼网站的跨站请求伪造操作:
前端代码:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
- <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
- </head>
- <body>
- <form action="" method="post">
- 转账人:<input type="text" name="user">
- 转账对象:<input type="text" name="to_sb">
- 转账金额:<input type="text" name="money">
- <input type="submit" value="转账">
- </form>
- </body>
- </html>
效果如下(很low):
视图代码如下:
- def index(request):
- if request.method=='POST':
- user=request.POST.get('user')
- to_sb=request.POST.get('to_sb')
- money=request.POST.get('money')
- #打印一下转账结果
- print('%s给%s转了%s元' % (user,to_sb,money))
- return HttpResponse('转账成功')
- return render(request,'index.html')
如果是一个正常的网站,运行结果应该如下:
提交:
后端的结果:
这样是没有任何问题的,但是如果网站没有进行防CSRF攻击(基本不可能,现在的主流网站都有防CSRF攻击),那么钓鱼网站就可以伪装,进行跨站请求伪造
接下来是钓鱼网站的视角:
首先:我看见了下面这个特别low的页面,发现没有防CSRF(等会说防御),直接copy源码
前端代码:
然后自己做一个和原网站一模一样的网站:
简单的模拟一下,网址已经变了
该网址的前端页面代码:
- <body>
- <form action="http://127.0.0.1:8000/index/" method="post">
- 转账人:<input type="text" name="user">
- 转账对象:<input type="text" >
- <input type="text" name="to_sb" value="诈骗犯" style="display: none">
- 转账金额:<input type="text" name="money">
- <input type="submit" value="转账">
- </form>>
和原网址的代码对比,其他不变,但是转账对象的name值被取消了,并且还添加了一个input框,该input框的name值,是原转账对象的name值,value值也被写死,还把该标签隐藏,这样你在转账对象中无论输入什么,你都是白给,因为name='to_sb'的这个标签的值已经被固定了,而且该表单的action函数还是原网站,所以说钓鱼网站的后端不用写post请求来之后的操作。
钓鱼网站的后端代码:
- def test(request):
- return render(request, 'test.html')
也就是说,后端逻辑用的原网站的逻辑,只是简单的固定了转账人的值
运行一下:
前端钓鱼页面:
当前网址还是:
转账:
跳到了原网页
看看原网站的打印输出:
这样已经老掉牙的钓鱼网站的模型就完成了
防CSRF跨站请求伪造攻击:
1.打开注释
2.在页面中添加:
这样防御就做好了(所以说是老掉牙的钓鱼攻击)
测试一下:
点击转账:
这是因为在添加了{% csrf_token %}之后,该网站的前端代码已经改变了
该value是随机的,刷新一下,值就会改变,也就是说,钓鱼网站不能动态的获取,那么CSRF攻击也就没用了
Django之CSRF跨站请求伪造(老掉牙的钓鱼网站模拟)的更多相关文章
- Django之CSRF 跨站请求伪造
一.简介 1.点我了解什么是跨站请求伪造 2.django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成.而对 ...
- django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块
CBV加装饰器 第一种 @method_decorator(装饰器) 加在get上 第二种 @method_decorator(login_auth,name='get') 加在类上 第三种 @met ...
- django的csrf跨站请求伪造
1.什么是跨站请求伪造 请看图: 我们自行写了一个网站模仿中国银行,用户不知道是否是真的中国银行,并且提交了转账信息,生成一个form表单,向银行服务器发送转账请求,这个form表单和正规银行网站的f ...
- Web框架之Django_09 重要组件(Django中间件、csrf跨站请求伪造)
摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于 ...
- Web框架之Django重要组件(Django中间件、csrf跨站请求伪造)
Web框架之Django_09 重要组件(Django中间件.csrf跨站请求伪造) 摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是 ...
- ajax向Django前后端提交请求和CSRF跨站请求伪造
1.ajax登录示例 urls.py from django.conf.urls import url from django.contrib import admin from app01 impo ...
- python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)
一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 from app01 import views urlpatterns = [ path('admin/', admi ...
- 第三百一十五节,Django框架,CSRF跨站请求伪造
第三百一十五节,Django框架,CSRF跨站请求伪造 全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.midd ...
- Django中的CSRF(跨站请求伪造)
Django中的CSRF(跨站请求伪造) Django CSRF 什么是CSFR 即跨站请求伪装,就是通常所说的钓鱼网站. 钓鱼网站的页面和正经网站的页面对浏览器来说有什么区别? (页面是怎么来的? ...
随机推荐
- 【转】W3C中国与百度联合组织移动网页加速技术研讨会
2017 年 8 月 30 日,W3C 会员百度在北京中关村软件园国际会议中心主办了 "移动网页加速技术研讨会",W3C 中国以及腾讯.阿里巴巴及 UC.搜狗.小米.傲游.中国移动 ...
- .NETCore+EF+MySql+Autofac简单三层架构
前言 其实就是一个简单依赖注入的三层架构.记录一下,大佬们就不用看下去了.重点在最后面,可以直接拖到底去看. 正文 1.贴代码 1.整体的一个结构.大佬们应该一眼就看明白了. 2.MySqlConte ...
- 【开源】OSharpNS,轻量级.net core快速开发框架发布
OSharpNS简介 OSharp Framework with .NetStandard2.0(OSharpNS)是OSharp的以.NetStandard2.0为目标框架,在AspNetCore的 ...
- Python-定时爬取指定城市天气(一)-发送给关心的微信好友
一.背景 上班的日子总是3点一线,家里,公司和上班的路径,对于一个特别懒得我来说,经常遇到上班路上下雨了,而我却没带伞,多么痛的领悟.最近对python有一种狂热的学习热情,写了4年多的C++代码,对 ...
- Hyperledger Fabric、Corda和以太坊对比
Hyperledger Fabric . Corda 和以太坊的对比 三种不同的框架 我们从 Hyperledger Fabric.R3 Corda和以太坊的白皮书中可以看到,三种框架在可能的应用领 ...
- vs中开发web站点使IIS Express支持局域网连接
vs中开发web站点使IIS Express支持局域网连接 在开发webapi的时候,客户端设备都会使用局域网的地址访问webapi,有时候需要调试api.这个时候就需要使用一些技巧了,这里我记录了我 ...
- 通过改进团队流程最大限度发挥Scrum的优势
团队如何最大限度地发挥Scrum和敏捷的优势? 回想一下,Scrum团队在Scrum的框架内定义了自己的流程.这其中包括方法.工具和互动以及如何履行Scrum角色的职责.如何使用工件和事件等. 如何确 ...
- Spring Boot Web 自定义注解篇(注解很简单很好用)
自从spring 4.0 开放以后,可以添加很多新特性的注解了.使用系统定义好的注解可以大大方便的提高开发的效率. 下面我贴一段代码来讲解注解: 通过小小的注解我们支持了以下功能: 使 spring. ...
- android---动画入门(一)
android 动画分为两类,View Animation(视图动画)和property Animation(属性动画),View Animation(视图动画)包含了Tween Animation和 ...
- MySQL读取Binlog日志常见的3种错误
1. mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8mb4' 当我们在my.cnf中添加default-charac ...