乔克视界 乔克视界
首页
  • 运维
  • 开发
  • 监控
  • 安全
  • 随笔
  • Docker
  • Golang
  • Python
  • AIOps
  • DevOps
  • 心情杂货
  • 读书笔记
  • 面试
  • 实用技巧
  • 博客搭建
友链
关于
收藏
  • 分类
  • 标签
  • 归档

乔克

云原生爱好者
首页
  • 运维
  • 开发
  • 监控
  • 安全
  • 随笔
  • Docker
  • Golang
  • Python
  • AIOps
  • DevOps
  • 心情杂货
  • 读书笔记
  • 面试
  • 实用技巧
  • 博客搭建
友链
关于
收藏
  • 分类
  • 标签
  • 归档
  • Docker

  • Golang

  • AIOps

  • Python

    • 基础知识

    • Django框架

      • Django之框架
      • Django之ORM详解
      • Django之操作ORM
      • Django之操作ORM例子
      • Django之路由系统
      • Django之跨站请求伪造
      • Django之Cookie和Session
      • Django之CBV和FBV
      • Django之中间件
      • Django之用户认证系统
      • Django之Form组件
      • Django之Ajax
      • Django之模板语言
      • Django之URL分发
      • Django中的缓存
      • Models迁移原理
      • 自定义组件Xadmin
      • Markdown 富文本插件
      • 手写一个验证码
    • 其他

  • DevOps

  • 专栏
  • Python
  • Django框架
乔克
2025-07-19

Django之跨站请求伪造

Django 中内置了一种专门处理 CSRF 问题的中间件 django.middleware.csrf.CsrfViewMiddleware;

这个中间件的工作流程:

1、在 render 返回页面的时候,在页面中塞了一个隐藏的 input 标签

用法:

我们在页面上 form 表单 里面 写上 {% csrf_token %}

2、当你提交 POST 数据的时候,它帮你做校验,如果校验不通过就拒绝这次请求

例如:transfer.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Title</title>
    {#
    <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" />
    #}
  </head>
  <body>
    <h1>正常网站</h1>
    <form action="/transfer/" method="post">
      {% csrf_token %}
      <p>
        转出:
        <input type="text" name="from" />
      </p>
      <p>
        转入:
        <input type="text" name="to" />
      </p>
      <p>
        金额:
        <input type="text" name="money" />
      </p>
      <p>
        <input type="submit" value="提交" />
      </p>
    </form>

    {#
    <script src="jquery-3.2.1.min.js"></script>
    #} {#
    <script src="bootstrap/js/bootstrap.min.js"></script>
    #}
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

views.py

from django.shortcuts import render, HttpResponse # Create your views here. def
transfer(request): if request.method == "POST": from_ = request.POST.get("from")
to_ = request.POST.get("to") money = request.POST.get("money") print("{} 转给 {}
{}元".format(from_, to_, money)) return HttpResponse("转账成功") return
render(request, "transfer.html")
1
2
3
4
5

作者:乔克

本文链接:https://jokerbai.com

版权声明:本博客所有文章除特别声明外,均采用 署名-非商业性-相同方式共享 4.0 国际 (CC-BY-NC-SA-4.0) 许可协议。转载请注明出处!

上次更新: 2025/07/19, 11:33:23
Django之路由系统
Django之Cookie和Session

← Django之路由系统 Django之Cookie和Session→

最近更新
01
使用 Generic Webhook Trigger 触发 Jenkins 多分支流水线自动化构建
07-19
02
使用Zadig从0到1实现持续交付平台
07-19
03
基于Jira的运维发布平台
07-19
更多文章>
Theme by Vdoing | Copyright © 2019-2025 乔克 | MIT License | 渝ICP备20002153号 |
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式