flask中的csrf防御机制

article/2025/9/23 4:31:27

csrf概念

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等

csrf攻击过程

  1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
  2. 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
  3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
  4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
  5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
    这里写图片描述

防御措施
1.开启csrf保护

在创建app实例的时候
from flask import Flask
from flask_wtf.csrf import CSRFProject
app=Flask(__name__)
#开启CSRF保护
CSRFProject(app)

2.对页面HTML加上csrf_token 的标签

# coding:utf-8from flask import Blueprint, current_app,make_response
from flask_wtf.csrf import generate_csrf# 构造一个蓝图对象
html = Blueprint("html", __name__)@html.route("/<re(r'.*'):file_name>")
def get_html_file(file_name):'''提供html文件'''# 根据用户指明的html文件名,提供相应的html文件if not file_name:file_name = "index.html"if file_name != "favicon.ico":file_name = "html/" + file_name    #使用wtf帮助我们生成csrf_token字符串csrf_token=generate_csrf()#为用户设置cookie值为csrf_token 防止csrf攻击resp=make_response(current_app.send_static_file(file_name))resp.set_cookie("csrf_token",csrf_token)return resp

3.给post请求的ajax中的headers添加“X-CSRFToken”

 req_json = JSON.stringify(req_data);$.ajax({url: "/api/v1_0/users",type: "post",data: req_json,contentType: "application/json",//指明向后端发送的是json格式数据dataType: "json",//指明从后端收到的数据是json格式的headers:{"X-CSRFToken":getCookie("csrf_token")},success: function (resp) {if (resp.errno == 0) {//注册成功,引导到主页界面location.href = "/";} else {alert(resp.errmsg);}}})

getCookie()函数是定义在js中的功能函数,如下:

function getCookie(name) {var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");return r ? r[1] : undefined;
}

1.在客户端向后端请求界面数据的时候,后端会往响应中的 cookie 中设置 csrf_token 的值
2.给post请求的ajax中的headers添加“X-CSRFToken”,添加值也是 csrf_token
3.在用户发起请求以后,会带上这两个值向后台发起请求
4.后端接受到请求,会做以下几件事:
1.从 cookie中取出 csrf_token
2.从headers中取出csrf_token
3.CSRFProtect会为我们自动比较这两个值
如果比较之后两值一样,那么代表是正常的请求,如果没取到或者比较不一样,代表不是正常的请求,不执行下一步操作
另外不要担心黑客能拿到csrf_token值,由于同源策略, 黑客是没办法获取用户浏览器中的csrf_token隐藏域,由于浏览器安全机制,黑客也没办法获取cookie中的csrf_token。
这里写图片描述


http://chatgpt.dhexx.cn/article/JyyjFkW1.shtml

相关文章

跨站请求伪造(csrf)

1、csrf介绍 CSRF (Cross-site request forgery&#xff0c;跨站请求伪造)也被称为One Click Attack或者Session Riding&#xff0c;通常缩写为CSRF或者XSRF&#xff0c;是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS)&#xff0c;但它与XSS非常不同&#xff0c;XSS利用站…

跨站请求伪造

1. 什么是跨站请求伪造&#xff08;CSRF&#xff09; CSRF&#xff08;Cross-site request forgery跨站请求伪造&#xff0c;也被称为“One Click Attack”或者Session Riding&#xff0c;通常缩写为CSRF或者XSRF&#xff0c;是一种对网站的恶意利用。尽管听起来像跨站脚本&…

压缩包破解

压缩包破解 文章目录 压缩包破解伪加密压缩包格式压缩源文件数据区压缩源文件目录区压缩源文件目录结束标志真加密字节对比伪加密字节对比伪加密 工具 ZipCenOp.jarjoin 破解fcrackzip 或者 ziperello 暴力破解伪加密 压缩包格式 一个 ZIP 文件由三个部分组成: 压缩源文

android apk解包和打包

最近项目开发&#xff0c;我的jar包和资源文件给别的同事打包&#xff0c;这样我自己测试很麻烦&#xff0c;每次改一点东西都要找人打包测试&#xff0c;很麻烦&#xff0c;就想着能够解包&#xff0c;更新一下自己的部分代码&#xff0c;再打包apk直接测试。后来找了一些网上…

python基础语法之拆包(解包)

理解和使用python中的拆包会让我们的代码变得流畅&#xff0c;不仅对自己的手关节有好处&#xff0c;也使看官觉得很赏心悦目&#xff0c;既然拆包这么香那就抓紧用起来吧。 1、直接交换变量的本质 在C&#xff0c;C和Java语言中如果想交换两个变量的值就必须用到第三个临时变…

Python中的解包

一、解包&#xff0c;英文名字叫UNPACKING,就是讲容器中所有的元素逐个取出来。 python中解包是自动完成的&#xff0c;例如&#xff1a; a,b,c [1,2,3] print(a,b,c) 1 2 3 除列表对象可以解包外PYTHON中的任何可迭代对象都可以进行解包&#xff0c;元组&#xff0c;字典&…

【Python小知识】:什么是序列解包

前言&#xff1a; &#x1f482;作者简介&#xff1a;大家好&#xff0c;我是翼同学&#xff01; &#x1f4c3;个人主页&#xff1a;翼同学的CSDN博客 &#x1f525;系列专栏&#xff1a;【python学习笔记】 &#x1f44f;备注&#xff1a;如果文章有误&#xff0c;请指正&…

python 抓包与解包

我使用的环境为&#xff1a;Windows10、python3.6、scapy 2.4.0 一、基本知识 Sniff方法定义&#xff1a;sniff(filter"",iface"any", prnfunction, countN)filter的规则使用 Berkeley Packet Filter (BPF)语法 iface用来指定要在哪个网络接口上进行抓包&…

.pkg文件解包

PePKG下载 1、拖入 RePKG.exe文件到cmd中 2、输入 extract&#xff0c;并将需要解包的 .pkg文件拖入cmd中 3、输入 -o 4、选择输出路径 创建一个文件拖入cmd中 回车即可完成解包

文件打包解包的方法

文件打包 前言 在很多情况下&#xff0c;软件需要隐藏一些图片&#xff0c;防止用户对其更改&#xff0c;替换。例如腾讯QQ里面的资源图片&#xff0c;哪怕你用Everything去搜索也搜索不到&#xff0c;那是因为腾讯QQ对这些资源图片进行了打包&#xff0c;当软件运行的时候解…

python中拆包解包用法详解

python可以对元组和字典进行拆包或解包操作。 1、拆包&#xff1a;元组 示例代码1&#xff1a; def return_num():return 100, 200num1, num2 return_num() print(num1) # 100 print(num2) # 200运行结果&#xff1a; 示例代码2&#xff1a; def return_num1():return 1…

android-apk解包打包

title: android-apk解包打包 categories: Android tags: [android, 加壳] date: 2022-09-28 10:29:51 comments: false mathjax: true toc: true android-apk解包打包, 以下所有操作都需要在配置好 java 环境下进行 前篇 android apk解包和打包 - https://blog.csdn.net/u0114…

Vue 3 之什么是 解包

Vue 3 之什么是 解包 前言结合代码分析总结 前言 从 Vue2 升到 Vue3 之后,用法上有了很大很大的变化 Vue3可以通过 ref 来声明一些响应式数据,可以是 any 类型的响应式数据 ,在 script 标签中访问和修改这个属性需要用 变量名.value Vue3 3.1 在 template 模板中使用定义的数…

python的解包

解包在英文里叫做 Unpacking&#xff0c;就是将容器里面的元素逐个取出来&#xff08;防杠精&#xff1a;此处描述并不严谨&#xff0c;因为容器中的元素并没有发生改变&#xff09;放在其它地方&#xff0c;好比你老婆去菜市场买了一袋苹果回来分别发给家里的每个成员&#xf…

apk解包+修改源码+重新打包 修改Android端app教程 修改apk文件教程

修改之前一定要先安装java开发环境&#xff0c;不会装的去自行百度。文章较长&#xff0c;耐心阅读。 一直在做Android应用开发&#xff0c;但对于从自己手中输出的apk包&#xff0c;了解并不是很深。最近想研究一下&#xff0c;消除下自己的一些技术盲点。 好吧&#xff0c;…

Python中的解包用法

Python中的解包用法 解包&#xff08;unpacking&#xff1a;解包&#xff0c;拆包&#xff09;&#xff0c;基本意思将容器里面的元素逐个取出来使用。封包&#xff08;packing&#xff1a;封包&#xff0c;打包&#xff09;基本意思将多个元素合起来作为一个整体使用。 可迭代…

SIP协议说明以及报文字段解析

SIP协议的概念&#xff1a; SIP 协议&#xff0c;即 会话初始协议&#xff08;Session Initiation Protocol&#xff09;&#xff0c;是一个应用层的 点对点协议&#xff0c;用于初始、管理和终止网络中的语音和视频会话&#xff0c;是 GB28181 的核心之一。 SIP是一个基于文本…

SIP 协议格式简介

消息体结构&#xff0c;由三部分组成&#xff1a; Request-Line / Status-Line (请求行 / 状态行)Header (消息头)Body (正文) 示例&#xff1a; Request-Line / Status-Line 介绍 Request-Line 格式&#xff1a; MethodRequest-URISIP-VersionCRLFINVITEsip:10011.1.1.1:5060…

会话初始协议---SIP协议【详解】

目录 ​ 一、SIP协议简介 二、SIP消息的两种会话模式 1、Session Model 2、Pager Model 三、SIP消息体格式 1、请求行(request-line) 2、状态行(status-line) 3、消息头 四、SIP消息举例 1、MESSAGE消息&#xff08;Pager Model&#xff09; 2、REGISTER消息 &…

SIP协议-02 原理讲解

文章目录 1 SIP实现机制2 SIP网络元素2.1 用户代理2.2 代理服务器2.3 重定向服务器2.4 位置服务器2.5 注册服务器 3 SIP中的几个重要概念3.1 Messages(消息)3.2 Dialog(对话)3.3 Transaction(事务)3.4 Session(会话) 4 工作流程4.1 登记注册4.2 建立呼叫4.3 重定向呼叫 5 SIP超…