Django之CSRF 跨站请求伪造

时间:2023-01-22 09:19:43

一、简介

1、点我了解什么是跨站请求伪造

2、django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能又分为全局和局部。

  • 全局
通过修改django中settings文件中中间件列表中的django.middleware.csrf.CsrfViewMiddleware,如果注释该选项,则表示全局不启用,否则表示全局启用
  • 局部
# 该装饰器加在views中的函数上
from django.views.decorators.csrf import csrf_exempt,csrf_protect # 导入装饰器
@csrf_protect # 为当前函数强制设置防跨站请求伪造功能,如果settings中没有设置全局中间件,在views中的函数加上该装饰器,则表示对该函数启用CSRF功能
@csrf_exempt # 取消当前函数防跨站请求伪造功能,如果settings中设置了全局中间件,在views中的函数加上该装饰器,则表示对该函数不启用CSRF功能

二、应用

1、通过form表单提交

  • csrf.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <form action="/csrf/" method="post"> <!-- html通过该simple_tag参数由模板渲染将其转换成一个隐藏的input标签,例如:
<input type="hidden" name="csrfmiddlewaretoken" value="9BxEgRk6hMR8bLPwLJs516YHCsNihbK47Lc3CyPASUcXZXS4r9M0j3zz2QOsmJaC"> -->
{% csrf_token %}
<input type="text" name="v" />
<input type="submit" value="提交" />
</form> </body>
</html>
  • views.py
from django.shortcuts import render

from django.views.decorators.csrf import csrf_protect

# Create your views here.

@csrf_protect
def csrf(request):
return render(request, 'csrf.html') # 这个地方一定要使用render,因为要对csrf.html中的模板语言进行渲染

2、通过Ajax提交

  • csrf.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% csrf_token %} <input type="button" onclick="Do();" value="提交"/> <script src="/static/jquery-1.12.4.js"></script>
<script src="/static/jquery.cookie.js"></script>
<script type="text/javascript"> {# 从cookie中拿到csrftoken #}
var csrftoken = $.cookie('csrftoken'); function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
} {# 当所有ajax发送数据之前都执行以下这个配置,自动将cookie中的csrftoken加入到request中的head中 #}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
function Do(){ $.ajax({
url:"/csrf/",
data:{id:1},
type:'POST',
success:function(data){
console.log(data);
}
}); }
</script> </body>
</html>
  • views.py
from django.shortcuts import render

from django.views.decorators.csrf import csrf_protect

@csrf_protect
def csrf(request):
return render(request, 'csrf.html')

点我查看官方详细说明

Django之CSRF 跨站请求伪造的更多相关文章

  1. Django之CSRF跨站请求伪造(老掉牙的钓鱼网站模拟)

    首先这是一个测试的代码 请先在setting页面进行下面操作 注释完成后,开始模拟钓鱼网站的跨站请求伪造操作: 前端代码: <!DOCTYPE html> <html lang=&q ...

  2. django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块

    CBV加装饰器 第一种 @method_decorator(装饰器) 加在get上 第二种 @method_decorator(login_auth,name='get') 加在类上 第三种 @met ...

  3. Web框架之Django&lowbar;09 重要组件(Django中间件、csrf跨站请求伪造)

    摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于 ...

  4. Web框架之Django重要组件(Django中间件、csrf跨站请求伪造)

    Web框架之Django_09 重要组件(Django中间件.csrf跨站请求伪造)   摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是 ...

  5. ajax向Django前后端提交请求和CSRF跨站请求伪造

    1.ajax登录示例 urls.py from django.conf.urls import url from django.contrib import admin from app01 impo ...

  6. python 全栈开发,Day87&lpar;ajax登录示例&comma;CSRF跨站请求伪造&comma;Django的中间件&comma;自定义分页&rpar;

    一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 from app01 import views urlpatterns = [ path('admin/', admi ...

  7. 第三百一十五节,Django框架,CSRF跨站请求伪造

    第三百一十五节,Django框架,CSRF跨站请求伪造  全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.midd ...

  8. Django中的CSRF&lpar;跨站请求伪造&rpar;

    Django中的CSRF(跨站请求伪造) Django CSRF  什么是CSFR 即跨站请求伪装,就是通常所说的钓鱼网站. 钓鱼网站的页面和正经网站的页面对浏览器来说有什么区别? (页面是怎么来的? ...

  9. Django框架 之 基于Ajax中csrf跨站请求伪造

    Django框架 之 基于Ajax中csrf跨站请求伪造 ajax中csrf跨站请求伪造 方式一 1 2 3 $.ajaxSetup({     data: {csrfmiddlewaretoken: ...

随机推荐

  1. &lbrack;CareerCup&rsqb; 16&period;1 Thread and Process 线程和进程

    16.1 What's the difference between a thread and a process? 进程Process是程序执行时的一个实例.一个进程是被分配系统资源的独立单元,每个 ...

  2. mysql SQLyog导入导出csv文件

    1.选择数据库表 --> 右击属性 --> 备份/导出 --> 导出表数据作为 --> 选择cvs --> 选择下面的“更改” --> 字段 --> 变量长度 ...

  3. windows下配置lamp环境&lpar;0&rpar;---软件获取

    工作快一年了,还没有怎么配置过服务器环境,经常使用集成套件wampserver,为了复习配置wamp服务器 特意在虚拟机中测试安装步骤如下. 安装前步骤:下载软件.软件下载地址如下: 1.apache ...

  4. webkit图片滤镜

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. js之原型,原型链

    1.原型是什么?    在构造函数创建出来的时候,系统会默认的创建并关联一个对象,这个对象就是原型,原型对象默认是空对象    默认的原型对象中会有一个属性constructor指向该构造函数  原型 ...

  6. Centos安装ffmpeg

    yum install -y ffmpeg 使用上面的命令安装却出现以下问题: Google后发现缺少一些扩展: wget https://download1.rpmfusion.org/free/e ...

  7. UVA 129困难的串【DFS】

    题目链接 题目大意: 给出n,l:要求按特定格式输出由前l个大写字母构成的按字母表排列的第n个没有连续重复子串的字符串以及该字符串长度. 此题是一道dfs递归回溯的基础题,难点在于对当前字符串是否有连 ...

  8. centos下如何清除重复的&dollar;PATH变量值

    运行: vim /etc/profile 添加如下代码: awk -F: '{    sep = ""    for (i = 1; i <= NF; ++i)        ...

  9. DevExpress GridView删除行

    int[] rows = gridView1.GetSelectedRows(); ) { if (DialogHelper.YesNo(this, "确认删除该记录?", &qu ...

  10. 激活Window和office工具

    激活Window和office工具:    第一种工具(已使用工具激活microsoft office professional plus 2013版本):         暴风激活工具(暴风激活工具 ...