Django之CSRF 跨站请求伪造

本文介绍Django中的CSRF跨站请求伪造防护机制,包括全局与局部设置方法,并提供通过form表单与Ajax提交的具体实现案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django之CSRF 跨站请求伪造

一、简介

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')
点我查看官方详细说明

posted on 2016-09-21 23:16 奋斗中的码农 阅读(...) 评论(...) 编辑 收藏

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值