首页 > 其他分享 >第六十四天 csrf, auth,中间件插拔解释

第六十四天 csrf, auth,中间件插拔解释

时间:2024-02-04 20:56:08浏览次数:21  
标签:插拔 username 六十四天 function 中间件 网站 cookie csrf name

一、csrf跨站请求伪造

1.简介
	钓鱼网站:假设是一个跟银行一模一样的网址页面 用户在该页面上转账
	账户的钱会减少 但是受益人却不是自己想要转账的那个人

2.模拟
一台计算机上两个服务端不同端口启动 钓鱼网站提交地址改为正规网站的地址
def transfer(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        target_user = request.POST.get('target_user')
        money = request.POST.get('money')
        print(f'{username}给{target_user}转了{money}')
    return render(request, 'transfer.html')
原来的真实的网站——————————————————————————————————————————————————————————————————————————
<form action="" method="post">
    <p>username:
        <input type="text" name="username">
    </p>
    <p>target_user:
        <input type="text" name="target_user">
    </p>
    <p>money:
        <input type="text" name="money">
    </p>
    <input type="submit">
</form>
伪造的钓鱼网站———————————————————————————————————————————————————————————————————————————
<form action="127.0.0.1:8080/transfer/" method="post">
    <p>username:
        <input type="text" name="username">
    </p>
    <p>target_user:
        <input type="text">
        <input type="text" name="target_user" value="中东悍匪" style="display: none">
    </p>
    <p>money:
        <input type="text" name="money">
    </p>
    <input type="submit">
</form>
"""
钓鱼网站的post的地址和真实网站的一样
钓鱼网站把已经设定好的值通过style="display: none"隐藏起来,并且给影藏name不给用户输入的东西name
"""

3.预防
	csrf策略:通过在返回的页面上添加独一无二的标识信息从而区分正规网站和钓鱼网站的请求
	csrf在服务端是通过settings的中间件创建的
	MIDDLEWARE = [
    'django.middleware.csrf.CsrfViewMiddleware',
]

二、csrf操作(403 Forbidden)

MIDDLEWARE = ['django.middleware.csrf.CsrfViewMiddleware',]

一.form表单
	<form action="" method="post">
    	{% csrf_token %}
	</form>
"""
1.查看网页源代码你会发现 {% csrf_token %} 自动变成了 <input type="hidden" name="csrfmiddlewaretoken" value="fVb50OZQMO5bYRPrV35r8rgbMJfHZ5X5LIstpbTHsmPu7z933FC3dVb6TVugwLTv">  并且每次访问后都会变化
"""


二.ajax
方式1:先编写csrf模板语法 然后利用标签查找和值获取 手动添加
<h1>这是真正的网站</h1>
{% csrf_token %}
<button id="d1">点我发送ajax请求</button>
<script src="/static/csrf.js"></script>
<script>
    $('#d1').click(function () {
        $.ajax({
            url:'',
            type:'post',
            data:{'username':'jason','csrfmiddlewaretoken':$('[name="csrfmiddlewaretoken"]').val()},
            data:{'username':'jason'},
            success:function (args){
            }
        })
    })
"""
1.利用ajax在传数据的同时把csrf的数据同时传输过去
2.csrfmiddlewaretoken是在前端的源代码里面找到的,不用去记忆
"""

方式2:直接利用模板语法即可
<button id="d1">快点我,点我呀</button>
{% csrf_token %}
<script>
    $('#d1').click(function () {
        $.ajax({
            url:'',
            type:'post',
            data:{'username':'jojo', 'csrfmiddlewaretoken':'{{ csrf_token }}'}
        })
    })
</script>
"""
1.'{{ csrf_token }}'可以替代上面的内容,注意要加双引号
"""

方式3:通用方式(js脚本)
# 创建static文件夹,在文件夹下面创建文件csrf.js
<button id="d1">快点我,点我呀</button>
<script src="/static/csrf.js"></script>
<script>
    $('#d1').click(function () {
        $.ajax({
            url:'',
            type:'post',
            data:{'username':'jojo'}
        })
    })
</script>

# 具体js文件代码__________________________________________________________________
function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
var csrftoken = getCookie('csrftoken');

function csrfSafeMethod(method) {
  // these HTTP methods do not require CSRF protection
  return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}

$.ajaxSetup({
  beforeSend: function (xhr, settings) {
    if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
      xhr.setRequestHeader("X-CSRFToken", csrftoken);
    }
  }
});

标签:插拔,username,六十四天,function,中间件,网站,cookie,csrf,name
From: https://www.cnblogs.com/tuq2791/p/18006969

相关文章

  • 中间件漏洞
    中间件漏洞IIS服务器漏洞IIS文件上传漏洞IIS6.0PUT上传漏洞是比较经典的ISS漏洞,如果IIS开启了PUT上传方法,就可以利用此方法上传任意文件,因此,该漏洞危害极大。漏洞产生原因IIS6.0PUT上传漏洞产生的原因IISServer在WEB服务扩展中开启了WebDAVIIS配置了可以写入的权限漏......
  • 第六十三天 cookie, session与Django中间件
    一、cookie与session简介"""HTTP协议四大特性1.基于请求响应2.基于TCP、IP作用于应用层之上协议 3.无状态服务端无法识别客户端的状态 1.互联网刚开始兴起的的时候所有人访问网址都是一样的数据 服务端无法识别客户端问题不大 2.互联网发展淘宝、京东、阿里 服务端......
  • django 项目中,用户登录功能中间件的应用
    不是完整的Demo,简单记录下。在Django项目中,中间件(Middleware)是一个轻量级、底层的插件系统,用于全局修改Django的输入或输出。每个中间件是一个处理请求或响应的钩子,可以在视图执行之前或之后运行代码。对于用户登录功能,中间件可以用来处理多种任务,比如:验证用户的登录状态:在每......
  • [Express]中间件监听不同事件
    监听req的data事件在中间件中,需要监听req对象的data事件,来获取客户端发送到服务器的数据。如果数据量比较大,无法一次性发送完毕,则客户端会把数据切割后,分批发送到服务器。所以data事件可能会触发多次,每一次触发data事件时,获取到数据只是完整数据的一部分,需要手动对接收到的......
  • 动力节点RabbitMQ教程|12小时学会rabbitmq消息中间件-02
    RabbitMQ集群cluster与高可用RabbitMQ的集群分两种模式,一种是默认集群模式,一种是镜像集群模式;在RabbitMQ集群中所有的节点(一个节点就是一个RabbitMQ的broker服务器)被归为两类:一类是磁盘节点,一类是内存节点;磁盘节点会把集群的所有信息(比如交换机、绑定、队列等信息)持久化......
  • Prometheus+Grafana+Jmeter监控服务器资源及中间件(Prometheus & node_exporter &mysq
    一、Prometheus&node_exporter&Grafana的原理Prometheus:Prometheus是一个开源的系统监控和报警工具包,它负责定时从各种数据源(如NodeExporter)中获取指标数据,并将其存储在自己的时间序列数据库中。Prometheus支持灵活的查询和报警功能,用户可以方便地对这些指标数据进行查询......
  • [Express]中间件的分类以及注意事项
    中间件的分类①应用级别的中间件通过app.use()或app.get()或app.post(),绑定到app实例上的中间件,叫做应用级别的中间件②路由级别的中间件绑定到express.Router()实例上的中间件,叫做路由级别的中间件。它的用法和应用级别中间件没有任何区别。只不过,应用级别中间件是绑定到......
  • 这样加个中间件,接口速度提升 1000%
    本文是在开发mockm周边过程中的创作。它可以快速生成api以及创造数据,开箱即用,便于部署,恳求不吝提出宝贵意见。动机最近在做一个curd项目,这里我们代名为myApi,用于实现0代码、无需声明模型、自动实现增删改查一些列的接口,支持任意关系型数据库。经过几天的努力,终于把基......
  • Mygin中间件优化及logger日志中间件
    本篇是mygin的第七篇,参照gin框架,感兴趣的可以从Mygin第一篇开始看,Mygin从零开始完全手写,在实现的同时,带你一窥gin框架的核心原理实现。目的中间件Middleware优化默认log日志中间件在上篇Mygin实现中间件Middleware中间件Middleware很生硬,完全依赖循环,如果某个中间件想要c......
  • Mygin中间件优化及sync.Pool上下文复用
    本篇是mygin的第六篇,参照gin框架,感兴趣的可以从Mygin第一篇开始看,Mygin从零开始完全手写,在实现的同时,带你一窥gin框架的核心原理实现。目的中间件Middleware优化默认log日志中间件在上篇Mygin实现中间件Middleware中间件Middleware很生硬,完全依赖循环,如果某个中间件想要c......