iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >解析django的csrf跨站请求伪造
  • 481
分享到

解析django的csrf跨站请求伪造

2024-04-02 19:04:59 481人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1.什么是跨站请求伪造2.如何规避跨站请求伪造(csrf校验)3.如何符合csrf校验3.1 fORM表单如何符合校验3.2 ajax如何符合校验4.csrf相关的装饰器4.1

1.什么是跨站请求伪造

请看图:

我们自行写了一个网站模仿中国银行,用户不知道是否是真的中国银行,并且提交了转账信息,生成一个form表单,向银行服务器发送转账请求,这个form表单和正规银行网站的form表单一模一样,只不过里面隐藏着改变了转账人的信息,改成了我们自己!!

然后,银行也不知道,因为拿到的表单是正规表单一模一样的,就给我们转了账!!

2.如何规避跨站请求伪造(csrf校验)

一般后端都会自带一个csrf校验,就是在给前端的form表单一个唯一的标识,form表单提交给后端,后端需要校验这个唯一标识,不符合就拒绝请求!!返回403(forbidden)

3.如何符合csrf校验

在我们自己写的正规网站,我们就需要在前端写一些标识,这个标识是告诉后端,这个请求是正确的,是我们正规的网站发出的,不是钓鱼网站!!

3.1 form表单如何符合校验

在需要提交的form表单里的任意位置加上{% form_token %},这时就符合了校验!

3.2 ajax如何符合校验

// 第一种 利用标签查找获取页面上的随机字符串
data:{"username":'jason','csrfmiddlewaretoken':$('[name=csrfmiddlewaretoken]').val()}
// 第二种 利用模版语法提供的快捷书写
data:{"username":'jason','csrfmiddlewaretoken':'{{ csrf_token }}'}
// 第三种 通用方式直接拷贝js代码并应用到自己的html页面上即可
data:{"username":'jason'}

ajax通过csrf校验的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);
    }
  }
});

4.csrf相关的装饰器

当我们在Django中注释掉csrf的中间件时,就表示网站所有的post请求都不进行校验;打开csrf中间件时,就表示对于所有的post请求都需要进行校验!

这是,我们思考两个问题:

1.网站整体都不校验csrf,就单单几个视图函数需要校验怎么办
2.网站整体都校验csrf,就单单几个视图函数不校验怎么办

这时,我们需要引入两个装饰器!

4.1 针对FBV的csrf装饰器

from djanGo.views.decorators.csrf import csrf_protect,csrf_exempt
from django.utils.decorators import method_decorator

# @csrf_exempt   #在打开csrf时对局部视图函数不进行校验
# @csrf_protect  #在关闭csrf时对局部视图函数进行校验
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('%s给%s转了%s元'%(username,target_user,money))
    return render(request,'transfer.html')

4.2 针对CBV的csrf装饰器

from django.views import View

# @method_decorator(csrf_protect,name='post')  # 针对csrf_protect 第二种方式可以
# @method_decorator(csrf_exempt,name='post')  # 针对csrf_exempt 第二种方式不可以
@method_decorator(csrf_exempt,name='dispatch')
class MyCsrfToken(View):
    # @method_decorator(csrf_protect)  # 针对csrf_protect 第三种方式可以
    # @method_decorator(csrf_exempt)  # 针对csrf_exempt 第三种方式可以
    def dispatch(self, request, *args, **kwargs):
        return super(MyCsrfToken, self).dispatch(request,*args,**kwargs)

    def get(self,request):
        return HttpResponse('get')

    # @method_decorator(csrf_protect)  # 针对csrf_protect 第一种方式可以
    # @method_decorator(csrf_exempt)  # 针对csrf_exempt 第一种方式不可以
    def post(self,request):
        return HttpResponse('post')
		
csrf_protect  需要校验
    针对csrf_protect符合我们之前所学的CBV装饰器的三种玩法
csrf_exempt   忽视校验
    针对csrf_exempt只能给dispatch方法加才有效

到此这篇关于解析django的csrf跨站请求伪造的文章就介绍到这了,更多相关django csrf跨站请求伪造内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 解析django的csrf跨站请求伪造

本文链接: https://www.lsjlt.com/news/120022.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 解析django的csrf跨站请求伪造
    目录1.什么是跨站请求伪造2.如何规避跨站请求伪造(csrf校验)3.如何符合csrf校验3.1 form表单如何符合校验3.2 ajax如何符合校验4.csrf相关的装饰器4.1 ...
    99+
    2022-11-11
  • CSRF跨站请求伪造漏洞分析与防御
    目录CSRF漏洞原理漏洞危害防御绕过漏洞利用防御措施总结CSRF 现在的网站都有利用CSRF令牌来防止CSRF,就是在请求包的字段加一个csrf的值,防止csrf,要想利用该漏洞,要...
    99+
    2022-11-13
  • PHP入门指南:跨站点请求伪造(CSRF)
    PHP是一种广泛使用的开源脚本语言,用于Web开发中。然而,随着网络犯罪的日益增加,安全性成为网络应用程序设计的重要考虑因素之一。跨站点请求伪造(CSRF)攻击是一个常见的网络安全漏洞之一,本篇文章旨在为PHP初学者提供一份CSRF入门指南...
    99+
    2023-05-21
    PHP 入门指南 跨站点请求伪造 (CSRF)
  • CSRF跨站请求伪造漏洞分析与防御的方法
    这篇文章主要介绍了CSRF跨站请求伪造漏洞分析与防御的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CSRF跨站请求伪造漏洞分析与防御的方法文章都会有所收获,下面我们一起来看看吧。CSRF现在的网站都有利用...
    99+
    2023-06-29
  • SpringSecurity跨域请求伪造(CSRF)的防护实现
    目录一、CSRF二、攻击过程三、防御手段1.HTTP Referer2.CsrfToken认证三、使用SpringSecurity防御CSRF 1.SpringSecuri...
    99+
    2022-11-13
  • 【Django | 安全防护】CSRF跨站伪请求和SQL注入攻击
    🤵‍♂️ 个人主页: @计算机魔术师 👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。 🌐 推荐一款找工作神器网站: ...
    99+
    2023-09-06
    django 安全 csrf 后端 python
  • PHP Session 跨域与跨站请求伪造的对比分析
    随着互联网的发展,Web 应用程序的安全性显得格外重要。在开发 Web 应用程序时,PHP Session 是一种常用的身份验证和会话跟踪机制,而跨域请求和跨站请求伪造 (CSRF) 则是两种主要的安全威胁。为了保护用户数据和应用程序的安全...
    99+
    2023-10-21
    csrf PHP Session 跨域请求
  • 如何排除PHP中的跨站请求伪造错误?
    跨站请求伪造(CSRF)攻击是一种常见的网络攻击手段,在PHP中的应用程序中也不例外。它利用用户的登录状态进行攻击,通过构造伪造的请求来伪装成合法用户提交恶意请求,进而产生危害。本文将介绍如何在PHP应用中排除CSRF漏洞,包括具体的代码示...
    99+
    2023-12-17
    防御措施 PHP跨站请求伪造 排除错误
  • 如何处理PHP开发中的跨站请求伪造问题
    引言:随着互联网的快速发展,网站安全问题也日益突出。其中之一就是跨站请求伪造(Cross-Site Request Forgery,CSRF)的问题。本文将介绍PHP开发中如何有效处理CSRF攻击,并提供具体的代码示例。什么是跨站请求伪造问...
    99+
    2023-10-21
    跨站请求伪造 (CSRF) 问题处理 PHP 开发中的 CSRF 防护 CSRF 攻击防范措施
  • Django框架CBV装饰器中间件auth模块CSRF跨站请求问题
    CBV添加装饰器 给CBV添加装饰器有三种方法,三种方法都需要导入模块: from django.utils.decorators import method_decorator...
    99+
    2022-11-12
  • Django解决跨域请求的问题
    一、引入   对于想要利用django框架实现前后端分离的童鞋来说,首要的问题便是解决跨域请求的问题。何为跨域请求?简单来说,就是当前发起的请求的域与该请求指向的资源所在的域不一致。当协议+域名+端口号均相同,那么就是同一个域。举个例子...
    99+
    2023-01-30
    Django
  • Django跨域请求无法传递Cookie的解决
    问题 在使用 Django + Vue 进行前后端分离开发时,发现在跨域访问情况下,后台 HttpResponse 在使用 set_cookie 方法后,浏览器无法获取 Cookie...
    99+
    2022-11-12
  • 关于JSONP跨域请求原理的深入解析
    目录什么是同源策略什么是JSONP练习jsonp的缺点总结什么是同源策略 同源策略,它是由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用...
    99+
    2022-11-12
  • 如何进行JSONP跨域请求原理的深入解析
    这篇文章将为大家详细讲解有关如何进行JSONP跨域请求原理的深入解析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是同源策略同源策略,它是由Netscape提出的一个著名的安全策略。现在...
    99+
    2023-06-26
  • 在.Net Framework应用中请求HTTP2站点的问题解析
    目录背景介绍什么是HTTP2及依赖条件Windows 对HTTP2的支持情况?Windows对TLS1.2的支持情况?.Net Framework对HTTP2的支持情况?.Net F...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作