当前位置: 首页 > news >正文

CTF-PHP反序列化漏洞1-基础知识

作者:Eason_LYC
悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。
一个人的价值,在于他所拥有的。可以不学无术,但不能一无所有!
技术领域:WEB安全、网络攻防
关注WEB安全、网络攻防。我的专栏文章知识点全面细致,逻辑清晰、结合实战,让你在学习路上事半功倍,少走弯路!
个人社区:极乐世界-技术至上
追求技术至上,这是我们理想中的极乐世界~(关注我即可加入社区)

本专栏CTF基础入门系列打破以往CTF速成或就题论题模式。采用系统讲解基础知识+入门题目练习+真题讲解方式。让刚接触CTF的读者真正掌握CTF中各类型知识点,为后续自学或快速刷题备赛,打下坚实的基础~

目前ctf比赛,一般选择php作为首选语言,如读者不了解php的基本语法,请登录相关网站自学下基本语法即可,一般5-7天即可掌握基础。

目录

  • 1. 什么是PHP序列化和反序列化
    • 1.1 基础概念
    • 1.2 基础知识
    • 1.3 PHP反序列化漏洞的危害
    • 1.4 PHP反序列化漏洞的防御措施
  • 2. 知识点讲解
    • 2.1 类的访问修饰符
      • 2.1.1 public 公开的
      • 2.1.2 protected 受保护的
      • 2.1.3 private 私有的
    • 2.2. 相关函数和重要知识点
      • 2.2.1 基础定义
      • 2.2.2 相关函数及技巧知识点
        • `serialize(mixed $value)`
        • `unserialize(string $str): mixed`
      • 2.2.3 【技巧】urlencode 序列化结果
      • 2.2.4 【技巧】序列化引用R类型绕过比对
      • 2.2.5 PHP反序列化特点
  • 3. PHP常用魔术方法
    • 3.1 魔法函数汇总
    • 3.2 魔法函数使用示例

1. 什么是PHP序列化和反序列化

1.1 基础概念

  • PHP序列化是将一个PHP对象转换成一个字符串,以便在不同的应用程序之间传递和存储。
  • 反序列化是将序列化的字符串转换回PHP对象。攻击者可以通过构造恶意的序列化字符串来触发代码执行,这就是PHP反序列化漏洞的本质。
  • PHP序列化函数官方文档:https://www.php.net/manual/en/function.serialize.php
  • PHP反序列化函数官方文档:https://www.php.net/manual/en/function.unserialize.php

1.2 基础知识

序列化是将 PHP 对象转换为可存储或传输的字符串的过程。序列化后的字符串可以保存到文件或通过网络传输到其他计算机,在需要时可以反序列化为原始对象。

序列化的基本原理是将 PHP 对象转换为一组字符串,其中包含对象的属性和变量。序列化后的字符串可以被反序列化为原始对象,从而重新创建对象。

PHP 序列化可以使用 PHP 内置的 serialize() 函数进行。例如,以下代码将一个 PHP 对象序列化为字符串:

$object = new MyClass();
$string = serialize($object);

在上面的代码中,$object 是一个 MyClass 类的实例,serialize() 函数将其序列化为一个字符串,存储在 $string 变量中。

反序列化可以使用 PHP 内置的 unserialize() 函数进行。例如,以下代码将一个序列化的字符串反序列化为 PHP 对象:

$string = 'O:7:"MyClass":2:{s:3:"foo";s:3:"bar";s:3:"baz";i:123;}';
$object = unserialize($string);

在上面的代码中,$string 是一个序列化的字符串,unserialize() 函数将其反序列化为一个 MyClass 类的实例,存储在 $object 变量中。

需要注意的是,PHP 序列化只能序列化 PHP 对象,不能序列化资源、闭包等其他类型的数据。另外,由于序列化后的字符串包含对象的私有属性和方法,因此在反序列化时需要确保对象的类定义已经加载到内存中。

简单来说,就是将一个php对象转化为字符串保存(序列化),方便传输到远端后,在远端再还原成对象的一个过程(反序列化)。

1.3 PHP反序列化漏洞的危害

PHP反序列化漏洞可以导致远程代码执行,攻击者可以通过构造恶意的序列化字符串,将任意代码注入到应用程序中,从而实现控制服务器的目的。

简单说就是构造恶意的字符串(序列化),这样远端还原对象时(反序列化),就把恶意的对象还原并执行了。

1.4 PHP反序列化漏洞的防御措施

防御PHP反序列化漏洞的方法有多种,其中最重要的是对用户输入进行过滤和验证。此外,还可以使用PHP内置的序列化函数进行序列化和反序列化,而不是使用第三方库。

2. 知识点讲解

首先我们先看一个完整的PHP序列化和反序列化的代码

CTF中往往会直接给出代码,需要分析代码编制恶意字符串

请添加图片描述

2.1 类的访问修饰符

上图中定义了一个类Tree,类中前三行分别出现了public、private、protected,分别是什么意思呢?下面我们就来详细介绍下~·

  • 类内部:是指类定义的内部,即类名后大括号{ }内部。
  • 类外部:是指类定义的外部内容,即类名后大括号{}之外的所有地方。
  • 类成员的访问权限控制分为:内部访问(私有的private)。内部访问(受保护protected)和全部访问(公有public)。

2.1.1 public 公开的

公开的属性或函数,可在类内部、外部访问
public $name='BMW'
public function XXX{}

2.1.2 protected 受保护的

受保护的属性或函数,只能在类及其子类、父类间内部访问。若想在外部访问,需要设置引用方法。
protected $color='blue'

2.1.3 private 私有的

私有的属性或函数,只能在当前类的内部访问,若想在外部访问,需要设置引用方法。

比如上图中最后三个echo的调用,如下图可以看到,public可以正常调用,其余两个产生报错

在这里插入图片描述

2.2. 相关函数和重要知识点

2.2.1 基础定义

序列化的目的是方便对象的传输和存储。

  • 序列化

指将一个实例化的对象从一个实例转换为一个简短的序列化字符串,这样便于保存对象,可以将序列化字节存储到数据库或者文本当中。

  • 反序列化

是当需要的时候再通过反序列化将序列化字符串解析,获取保存的对象,直接调用,而不需要重新实例化一个类

在PHP应用中,序列化和反序列化一般用做缓存,比如session缓存,cookie等

2.2.2 相关函数及技巧知识点

serialize(mixed $value)

参数为需要序列化的对象、数组、字符串等。返回值类型为字符串,即序列化字符串。

unserialize(string $str): mixed

参数类型为字符串,也就是序列化字符串。返回值为反序列化得到的对象、数组、字符串等。

<?php
class Car{public $name='BMW';protected $color='blue';private $size='large';private $price;function __construct(){echo '序列化时调用构造方法<br>';}function __destruct(){echo '反序列化时调用析构函数<br>';}function show(){echo $this->name.'<br>';echo $this->color.'<br>';echo $this->size.'<br>';echo 'price:"'.$this->price.'"<br>';}
}$myCar = new Car();
$o = serialize($myCar);
print_r($o);
print_r("\n");
print_r(urlencode($o));
print_r("\n");$un_o = unserialize(urlencode($o));
print_r($un_o);?>// 序列化时调用构造方法
// O:3:"Car":4:{s:4:"name";s:3:"BMW";s:8:"*color";s:4:"blue";s:9:"Carsize";s:5:"large";s:10:"Carprice";N;}
// O%3A3%3A%22Car%22%3A4%3A%7Bs%3A4%3A%22name%22%3Bs%3A3%3A%22BMW%22%3Bs%3A8%3A%22%00%2A%00color%22%3Bs%3A4%3A%22blue%22%3Bs%3A9%3A%22%00Car%00size%22%3Bs%3A5%3A%22large%22%3Bs%3A10%3A%22%00Car%00price%22%3BN%3B%7D// 反序列化时调用析构函数

这段代码定义了一个名为Car的类,包含公共属性$name、受保护属性$color、私有属性$size和未定义初始值的私有属性$price,以及构造函数__construct()析构函数__destruct()和一个公共方法show(),用于输出属性的值。

在代码中,首先创建了一个Car类的实例$myCar,并将其序列化为字符串$o,然后打印输出$o和$o的URL编码形式。

$o=O:3:"Car":4:{s:4:"name";s:3:"BMW";s:8:"*color";s:4:"blue";s:9:"Carsize";s:5:"large";s:10:"Carprice";N;}
urlencode($o) = O%3A3%3A%22Car%22%3A4%3A%7Bs%3A4%3A%22name%22%3Bs%3A3%3A%22BMW%22%3Bs%3A8%3A%22%00%2A%00color%22%3Bs%3A4%3A%22blue%22%3Bs%3A9%3A%22%00Car%00size%22%3Bs%3A5%3A%22large%22%3Bs%3A10%3A%22%00Car%00price%22%3BN%3B%7D

接着,将URL编码后的字符串$o反序列化为一个新的对象$un_o,并打印输出$un_o。

在输出的过程中,构造函数__construct()被调用,输出序列化时调用构造方法,而析构函数__destruct()在反序列化时被调用,输出反序列化时调用析构函数。在调用show()方法时,只有公共属性$name和受保护属性$color被输出,而私有属性$size的值无法输出。

PHP序列化字符串的格式如下:
对象类型:长度:“类名”:类中变量的个数:{类型:长度:“值”;类型:长度:“值”;......}

这里的长度是指字符串长度 o表示对象,a表示数组,s表示字符,i表示数字

2.2.3 【技巧】urlencode 序列化结果

  • %00为空字符,占位1位。正常浏览器不会显示,但是在urlencode下会显示
  • private在序列化后会出现%00*%00(%00*%00color)
  • protected在序列化后出现 %00类名%00变量名(%00Car%00size)

为避免浏览器不显示空字段,导致反序列化不成功,使用序列化时采用url编码
$o = urlencode(serialize($myCar))
在这里插入图片描述

2.2.4 【技巧】序列化引用R类型绕过比对

序列化的时候可以通R类型值来保存变量的引⽤(指针)状态。

在这里插入图片描述

上述含义为:input值引用correct值的结果。保持key[correct] = key[input]

2.2.5 PHP反序列化特点

PHP在序列化保存类对象状态时,只保存其中的变量和类名等,并不会保存序列化时类的结构(不保存方法)。在反序列化时其实就是将序列化字符串中存储的变量,带入到当前上下文环境中寻找到的类,去重新实例化对象。

3. PHP常用魔术方法

3.1 魔法函数汇总

在面向对象编程中,PHP 提供了一系列的魔术方法,这些魔术方法为编程提供了很多便利,在 PHP 中的作用是非常重要的。PHP 中的魔术方法通常以__(两个下划线)开始,并且不需要显式的调用而是在某种特定条件下自动调用的。上文中介绍的构造函数 __construct() 在实例化对象时调用,析构函数__destruct()在销毁对象时自动调用。常用魔术方法如下:

__construct()  // 构造函数,在实例化对象时调用
__destruct()   // 析构函数,在销毁对象时调用
__call(string $function_name, array $arguments)  // 在对象中调用一个不可访问或不存在的方法时被调用
__callStatic() // 用静态方式中调用一个不可访问方法时调用
__get($name)   // 获取对象不存在的属性或无法访问的属性时调用.$name表示要获取的属性名
__set($name, $value) // 设置对象不存在的属性或无法访问的属性时调用.$name表示要设置的属性名,$value表示要设置的值
__isset()     // 当对不可访问属性调用isset()或empty()时调用
__unset()     // 当对不可访问属性调用unset()时被调用
__sleep()     // 执行serialize()时,先会调用这个函数
__wakeup()    // 执行unserialize()时,先会调用这个函数
__toString()  // 类被当成字符串时的回应方法  echo $obj;
__invoke()    // 以调用函数的方式调用一个对象时的回应方法  $person();
__set_state() // 调用var_export()导出类时,此静态方法会被调用
__clone()     // 当对象复制完成时调用
__autoload()  // 尝试加载未定义的类
__debugInfo() // 打印所需调试信息

反序列化时会默认调用的方法有:

  • __destruct()
  • __wakeup()

魔法函数介绍推荐文章:
PHP之十六个魔术方法详细介绍
PHP魔法方法/函数详解

3.2 魔法函数使用示例

下面这段代码,初学时也许看不明白,但其实含金量非常高,后续做题中,这个表要反复查看的~

<?php
# 设置⼀个类A
class A{private $name = "AS1def";function __construct(){echo "__construct() call\n";}function __destruct(){echo "\n__destruct() call\n";}function __toString(){return "__toString() call\n";}function __sleep(){echo "__sleep() call\n";return array("name");}function __wakeup(){echo "__wakeup() call\n";}function __get($a){echo "__get() call\n";return $this->name;}function __set($property, $value){ echo "\n__set() call\n";$this->$property = $value;}function __invoke(){echo "__invoke() call\n";}
}
//调⽤ __construct()
$a = new A();
//调⽤ __toSting()
echo $a;
//调⽤ __sleep()
$b = serialize($a);
echo $b;
//调⽤ __wakeup()
$c = unserialize($b);
echo $c;
//不存在这个abcd属性,调⽤ __get()
echo $a->abcd;
//name是私有变量,不允许修改,调⽤ __set()
$a->name = "pro";
echo $a->name;
//将对象作为函数,调⽤ __invoke()
$a();
//程序结束,调⽤ __destruct() (会调⽤两次__destruct,因为中间有⼀次反序列化)

输出结果如下:

__construct() call
__toString() call
__sleep() call
O:1:"A":1:{s:7:"Aname";s:6:"AS1def";}__wakeup() call
__toString() call
__get() call
AS1def
__set() call
__get() call
pro__invoke() call__destruct() call__destruct() call

以上就是PHP反序列化的基础知识,下一篇文章就在这些基础知识上,开始题目的练习~

相关文章:

CTF-PHP反序列化漏洞1-基础知识

作者&#xff1a;Eason_LYC 悲观者预言失败&#xff0c;十言九中。 乐观者创造奇迹&#xff0c;一次即可。 一个人的价值&#xff0c;在于他所拥有的。可以不学无术&#xff0c;但不能一无所有&#xff01; 技术领域&#xff1a;WEB安全、网络攻防 关注WEB安全、网络攻防。我的…...

【面试】记一次安恒面试及总结

文章目录SQL 注入sql注入的原理&#xff1f;如何通过SQL注入判断对方数据库类型&#xff1f;补充一下其他方法判断数据库类型时间盲注的函数XPath注入抓不到http/https包&#xff0c;怎么办&#xff1f;app无自己的ssl证书app有自己的ssl证书-证书绑定(SSL pinning)逻辑漏洞有哪…...

刹车制动(卡钳)TOP3供应商份额超50%,哪些本土供应商突围

作为中国本土底盘系统供应商最早切入的细分市场之一&#xff0c;乘用车&#xff08;液压&#xff09;刹车制动器&#xff08;含卡钳&#xff09;由连接到车轮的制动盘和位于制动盘边缘的卡钳组成。制动时&#xff0c;高压刹车油推动刹车片夹紧刹车盘&#xff0c;从而产生制动效…...

Go分布式爬虫笔记(二十二)

文章目录22 辅助任务管理&#xff1a;任务优先级、去重与失败处理设置爬虫最大深度避免请求重复设置优先队列设置随机User-Agent失败处理22 辅助任务管理&#xff1a;任务优先级、去重与失败处理 设置爬虫最大深度 目的: 防止访问陷入到死循环控制爬取的有效链接的数量 最大…...

跨线程修改主界面

winform 方式&#xff1a; public delegate void MyInvoke(string str1); private void check_Click(object sender, RoutedEventArgs e) { //跨现场调度1 delete委托 WIMFORM Task.Run(() > { …...

国内ChatGPt研发-中国chatGPT

人工智能软件chatGPT Chat GPT是一种自然语言处理算法&#xff0c;采用了深度学习技术&#xff0c;用于实现文本生成和自然语言处理任务。它可以实现自然而然的人机交互&#xff0c;在自然语言生成和问答领域应用广泛。 值得注意的是&#xff0c;Chat GPT本身并不是一款具体的…...

springboot的rest服务配置服务的根路径

如果不配置默认为空&#xff0c;如下是application.yml文件只配置了端口号 server:port: 6868 那么访问时直接访问服务即可 如果配置了rest服务 RestController RequestMapping("/netLicense") public class NetLicenseController {RequestMapping("/getLice…...

MySQL B+Tree 索引优化技巧

文章目录前言一、BTree索引的基本原理二、BTree索引的性能优化技巧1.索引列的选择2.索引列的顺序3.索引长度4.索引的覆盖性5. 索引的唯一性总结前言 MySQL是一种开源关系型数据库管理系统&#xff0c;被广泛应用于各种应用程序中。作为一种关系型数据库&#xff0c;MySQL使用B…...

100种思维模型之逆向思维模型-46

芒格思考问题总是从逆向开始&#xff01;正如他经常提到的一句谚语&#xff1a;如果我能够知道我将死在哪里&#xff0c;那么我将永远不去那个地方。 马云有句口头禅&#xff1a;倒立看世界&#xff0c;一切皆有可能&#xff01; 遇到难题时&#xff0c;不妨回头看看&#xff0…...

C/C++每日一练(20230413)

目录 1. 与浮点数A最接近的分数B/C &#x1f31f; 2. 比较版本号 &#x1f31f;&#x1f31f; 3. 无重复字符的最长子串 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…...

volatile和synchronized的区别

volatile和synchronized的区别并发编程三个特性&#xff1a;原子性有序性可见性ViolatedSynchronized区别对比并发编程三个特性&#xff1a; 原子性、有序性、可见性 原子性 volatile无法保证原子性。 synchronized是排它锁&#xff0c;被synchronzied修饰的代码不能被打断…...

Cadence Allegro 导出Unplaced Component Report报告详解

⏪《上一篇》   🏡《上级目录》   ⏩《下一篇》 目录 1,概述2,Unplaced Component Report作用3,Unplaced Component Report示例4,Unplaced Component Report导出方法4.1,方法14.2,方法2B站关注“硬小二”浏览更多演示视频...

面试了上百位性能测试后,我发现了一个令人不安的事实...

在企业中负责技术招聘的同学&#xff0c;肯定都有一个苦恼&#xff0c;那就是招一个合适的测试太难了&#xff01;若要问起招哪种类型的测试最难时&#xff0c;相信很多人都会说出“性能测试”这个答案。 每当发布一个性能测试岗位&#xff0c;不一会就能收到上百份简历&#…...

天气预报查询 API + AI 等于王炸(一大波你未曾设想的天气预报查询 API 应用场景更新了)

前言 近年来&#xff0c;随着信息化进程的不断深入&#xff0c;人们对于信息的获取和处理需求越来越高。而其中&#xff0c;天气查询API是一个非常重要的服务&#xff0c;它能够帮助人们快速获取所在位置的天气情况&#xff0c;同时也为各类应用提供了必要的气象数据支持。 本…...

跨境电商的行业现状与发展趋势分析

随着互联网的不断发展&#xff0c;跨境电商作为一种全新的商业模式已经逐渐崭露头角。跨境电商的出现&#xff0c;让越来越多的商家看到了扩大市场的机会&#xff0c;也为消费者提供了更加便利、更加优质的购物体验。本文将从跨境电商的定义、行业现状、发展趋势等方面进行探讨…...

适配器设计模式

目录 前言&#xff1a; 适配器原理与实现 适配器模式的应用场景 1.封装有缺陷的接口 2.统一多个类的接口设计 3.替换依赖的外部系统 4.兼容老版本接口 5.适配不同格式的数据 代理、桥接、装饰器、适配器 4 种设计模式的区别 参考资料 前言&#xff1a; 适配器模式这个模…...

代码随想录算法训练营第三十五天-贪心算法4| ● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

860.柠檬水找零 参考视频&#xff1a;贪心算法&#xff0c;看上去复杂&#xff0c;其实逻辑都是固定的&#xff01;LeetCode&#xff1a;860.柠檬水找零_哔哩哔哩_bilibili 解题思路&#xff1a; 只需要维护三种金额的数量&#xff0c;5&#xff0c;10和20。 有如下三种情…...

2023MathorcupC题电商物流网络包裹应急调运与结构优化问题建模详解+模型代码(一)

电商物流网络包裹应急调运与结构优化问题 第三次继续写数模文章和思路代码了&#xff0c;不知道上次美赛和国赛大家有没有认识我&#xff0c;没关系今年只要有数模比赛艾特我私信我&#xff0c;要是我有时间我一定免费出文章代码好吧&#xff01;博主参与过十余次数学建模大赛…...

软件测试技术之跨平台的移动端UI自动化测试(上)

摘要&#xff1a;本文提出一种跨平台的UI自动化测试方案&#xff0c;一方面使用像素级的截图对比技术&#xff0c;解决传统UI自动化测试难以验证页面样式的问题&#xff1b;另一方面用统一部署在服务器端的JavaScript测试代码代替Android和iOS测试代码&#xff0c;大大提高编写…...

【MySQL--02】库的操作

文章目录1.库的操作1.1创建数据库1.2创建数据库的案例1.3字符集和校验规则1.3.1查看系统默认字符集以及校验规则1.3.2查看数据库支持的字符集1.3.3查看数据库支持的字符集校验规则1.3.4 校验规则对数据库的影响1.4操纵数据库1.4.1查看数据库1.4.2 删除数据库1.4.3显示创建语句1…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...

FOPLP vs CoWoS

以下是 FOPLP&#xff08;Fan-out panel-level packaging 扇出型面板级封装&#xff09;与 CoWoS&#xff08;Chip on Wafer on Substrate&#xff09;两种先进封装技术的详细对比分析&#xff0c;涵盖技术原理、性能、成本、应用场景及市场趋势等维度&#xff1a; 一、技术原…...

StarRocks 全面向量化执行引擎深度解析

StarRocks 全面向量化执行引擎深度解析 StarRocks 的向量化执行引擎是其高性能的核心设计&#xff0c;相比传统行式处理引擎&#xff08;如MySQL&#xff09;&#xff0c;性能可提升 5-10倍。以下是分层拆解&#xff1a; 1. 向量化 vs 传统行式处理 维度行式处理向量化处理数…...

Docker、Wsl 打包迁移环境

电脑需要开启wsl2 可以使用wsl -v 查看当前的版本 wsl -v WSL 版本&#xff1a; 2.2.4.0 内核版本&#xff1a; 5.15.153.1-2 WSLg 版本&#xff1a; 1.0.61 MSRDC 版本&#xff1a; 1.2.5326 Direct3D 版本&#xff1a; 1.611.1-81528511 DXCore 版本&#xff1a; 10.0.2609…...