Rust中 引用类型 VS 裸指针
在Rust的内存安全模型中引用类型和裸指针是两种用于间接访问数据的核心方式——引用类型是Rust安全编程的基石依托所有权与生命周期机制保障内存安全裸指针则是突破安全约束、对接底层开发的“一把钥匙”允许开发者直接操作内存地址却也放弃了编译器的安全检查。很多Rust初学者容易混淆两者的用法不清楚何时该用引用、何时该用裸指针以及两者背后的设计逻辑差异。本文将从基础概念入手逐步拆解两种类型的用法、示例深入对比其核心异同并补充生命周期、unsafe安全边界、FFI交互等拓展内容帮助大家彻底理清两者的关系灵活运用在实际开发中既守住Rust的内存安全底线也能应对底层开发的特殊需求。一、基础铺垫先搞懂两个核心概念在解析异同和用法前我们先明确引用类型和裸指针的本质定义以及Rust设计它们的核心目的为后续内容打下基础。1.1 引用类型Reference安全的“间接访问工具”Rust中的引用类型分为两种不可变引用T和可变引用mut T核心定位是“安全、无所有权的间接访问”——它不拥有所指向数据的所有权只是“借用”数据的访问权限且全程受Rust编译器的严格检查杜绝悬垂引用、数据竞争等内存安全问题。引用类型的设计核心是“安全优先”依托以下两个机制保障安全所有权规则引用不拥有数据数据的生命周期由所有者决定引用的生命周期不能超过所有者的生命周期避免悬垂引用借用规则不可变引用T允许多个共存只读不写无数据竞争可变引用mut T只能有一个且不可与不可变引用同时存在读写互斥杜绝数据竞争。引用类型是Rust日常开发中最常用的间接访问方式无需手动管理内存也无需使用unsafe关键字编译器会在编译期完成所有安全检查。1.2 裸指针Raw Pointer底层的“内存地址直接操作工具”裸指针是Rust提供的“底层内存访问接口”分为两种不可变裸指针*const T和可变裸指针*mut T核心定位是“灵活、无安全检查的直接内存操作”——它本质上就是一个内存地址值不遵守所有权规则、不受生命周期约束也不做任何安全检查完全依赖开发者手动保证内存安全。裸指针的设计核心是“灵活优先”主要用于以下场景底层开发如操作系统内核、驱动程序需要直接操作内存地址FFI交互与C/C等语言交互C语言的指针对应Rust的裸指针智能指针实现如Box、Rc、Arc等智能指针的底层都是通过裸指针实现堆内存分配与管理再通过封装unsafe代码提供安全接口。注意所有涉及裸指针的解引用、修改操作都必须放在unsafe代码块中或unsafe函数/特质中这是Rust编译器的强制要求——用于提醒开发者“此处代码存在内存安全风险需手动保证安全”。二、用法全解析搭配示例代码一看就懂这一部分是核心我们分别拆解引用类型和裸指针的具体用法每个用法都搭配可运行的示例代码标注关键注释并解释背后的原理确保通俗易懂。2.1 引用类型T / mut T的用法示例引用类型的用法围绕“借用规则”展开无需unsafe编译期检查所有安全问题我们分不可变引用、可变引用、借用冲突三个场景讲解。示例1不可变引用T的基本用法不可变引用用于“只读访问”允许多个引用共存不允许通过引用修改数据适用于多线程只读共享、数据查看等场景。fnmain(){// 定义一个所有者变量i32类型栈上分配letnum100;// 创建不可变引用i32借用num的只读权限letref1:i32num;// 可以创建多个不可变引用只读不写无数据竞争letref2:i32num;// 通过引用访问数据无需解引用符号*Rust自动解引用println!(通过ref1访问{},ref1);println!(通过ref2访问{},ref2);// 直接访问所有者变量不受影响因为引用不拥有所有权println!(直接访问num{},num);// 错误示例不可变引用不能修改数据编译报错// *ref1 200;}// 运行结果// 通过ref1访问100// 通过ref2访问100// 直接访问num100关键说明创建引用的语法是变量名引用的类型是TT是被引用数据的类型Rust对引用提供“自动解引用”特性无需像C语言那样写*ref1直接使用ref1即可访问数据注释的错误代码会编译报错因为不可变引用的核心是“只读”编译器会阻止修改操作避免意外破坏数据。示例2可变引用mut T的基本用法可变引用用于“读写访问”只能有一个可变引用且不能与不可变引用同时存在适用于需要修改数据的场景如修改结构体字段、更新变量值。fnmain(){// 定义可变所有者变量必须用mut修饰才能创建可变引用letmutnum100;// 创建可变引用mut i32借用num的读写权限letmut_ref:muti32mutnum;// 通过可变引用修改数据需要解引用符号*明确操作指针指向的数据*mut_ref200;// 通过引用访问修改后的数据println!(通过mut_ref访问{},mut_ref);// 直接访问所有者变量数据已被修改println!(直接访问num{},num);// 错误示例1同一作用域内不能有多个可变引用编译报错// let mut_ref2: mut i32 mut num;// 错误示例2可变引用与不可变引用不能同时存在编译报错// let ref1: i32 num;}// 运行结果// 通过mut_ref访问200// 直接访问num200关键说明创建可变引用的前提是“所有者变量必须是mut的”语法是mut变量名类型是mut T通过可变引用修改数据时必须使用解引用符号*明确表示“修改指针指向的内存中的数据”而非修改指针本身两个错误示例都会编译报错这是Rust的“借用规则”强制约束目的是杜绝数据竞争比如两个指针同时修改同一块内存。示例3引用的生命周期与悬垂引用规避引用的生命周期Lifetime是“引用的有效存活时间”编译器会自动推断生命周期确保引用的生命周期不超过所有者的生命周期从而规避悬垂引用引用指向已被释放的内存。// 定义一个函数返回两个i32的不可变引用中较大的一个// 这里需要显式标注生命周期a编译器无法自动推断时需手动标注fnmax_refa(a:ai32,b:ai32)-ai32{ifab{a}else{b}}fnmain(){letx10;lety20;// 调用函数x和y的生命周期都是main函数的作用域返回的引用生命周期也相同letmax_valmax_ref(x,y);println!(较大的值{},max_val);// 错误示例悬垂引用编译报错letdangling_ref:i32;{letz30;dangling_refz;// z的作用域是内层大括号生命周期短于dangling_ref}// 此时z已被释放dangling_ref指向无效内存编译器直接报错// println!(悬垂引用{}, dangling_ref);}// 运行结果// 较大的值20关键说明大多数情况下编译器会自动推断引用的生命周期无需手动标注当编译器无法推断如函数返回引用、多个引用生命周期不一致时需手动标注如a注释的悬垂引用示例会编译报错这是Rust的核心优势——将内存安全问题提前到编译期避免运行时崩溃C语言中悬垂指针会导致未定义行为难以排查。2.2 裸指针*const T / *mut T的用法示例裸指针的用法核心是“手动管理安全”所有操作都需放在unsafe代码块中编译器不做任何安全检查我们分“创建裸指针”“解引用裸指针”“裸指针的风险场景”三个部分讲解。示例4裸指针的创建三种常用方式裸指针的创建无需unsafe仅创建不操作内存无安全风险常用三种方式引用转换、Box转换、直接创建空指针。fnmain(){// 方式1从引用转换为裸指针最常用安全转换letnum100;letmutnum_mut200;// 不可变引用 → 不可变裸指针*const i32letconst_ptr:*consti32numas*consti32;// 可变引用 → 可变裸指针*mut i32letmut_ptr:*muti32mutnum_mutas*muti32;// 方式2从Box转换为裸指针Box是智能指针底层是裸指针letbox_numBox::new(300);// into_raw方法将Box转换为裸指针放弃Box的所有权不再自动释放内存letbox_ptr:*muti32Box::into_raw(box_num);// 方式3直接创建空裸指针需谨慎使用解引用会崩溃letnull_const_ptr:*consti32std::ptr::null();// 不可变空指针letnull_mut_ptr:*muti32std::ptr::null_mut();// 可变空指针// 打印裸指针本质是内存地址格式为十六进制println!(引用转换的不可变裸指针{:p},const_ptr);println!(引用转换的可变裸指针{:p},mut_ptr);println!(Box转换的裸指针{:p},box_ptr);println!(空不可变裸指针{:p},null_const_ptr);// 打印(null)// 手动释放Box转换的裸指针避免内存泄漏unsafe{drop(Box::from_raw(box_ptr));// from_raw将裸指针转换回Box自动释放内存}}// 运行结果地址因人而异// 引用转换的不可变裸指针0x7ffdxxxxxxxxx// 引用转换的可变裸指针0x7ffdxxxxxxxxx// Box转换的裸指针0x55xxxxxxxxx// 空不可变裸指针(null)关键说明裸指针的打印使用{:p}格式符会以十六进制显示内存地址从Box转换为裸指针后Box的“自动释放内存”特性会失效必须手动通过Box::from_raw转换回Box再drop释放内存否则会导致内存泄漏空裸指针null不能解引用否则会导致运行时崩溃未定义行为实际开发中需先判断指针是否非空。示例5裸指针的解引用与修改unsafe必用裸指针的解引用访问/修改指向的数据是核心操作必须放在unsafe代码块中开发者需手动保证指针有效非空、指向未释放的内存。fnmain(){letmutnum100;// 从可变引用转换为可变裸指针letmut_ptr:*muti32mutnumas*muti32;// 裸指针解引用、修改数据必须放在unsafe块中unsafe{// 解引用不可变裸指针读取数据*const T// let val *const_ptr;// 解引用可变裸指针修改数据*mut T*mut_ptr200;// 解引用读取修改后的数据println!(裸指针解引用读取{},*mut_ptr);}// 直接访问所有者变量数据已被修改println!(直接访问num{},num);// 示例判断裸指针是否非空避免空指针解引用letnull_ptr:*muti32std::ptr::null_mut();unsafe{if!null_ptr.is_null(){*null_ptr300;}else{println!(裸指针为空无法解引用);}}}// 运行结果// 裸指针解引用读取200// 直接访问num200// 裸指针为空无法解引用关键说明裸指针的解引用必须使用*符号且全程在unsafe块中编译器不检查指针是否有效实际开发中使用裸指针前必须先通过is_null()判断是否非空这是避免空指针解引用的核心手段本例中mut_ptr指向的num仍在作用域内未被释放所以解引用是安全的若num已被释放解引用会导致未定义行为崩溃、乱码等。示例6裸指针的风险场景悬垂裸指针裸指针没有生命周期约束容易出现悬垂裸指针指向已释放的内存这种情况编译器不会报错运行时会出现未定义行为是裸指针最常见的安全风险。fnmain(){letmut_ptr:*muti32;{letmutnum100;mut_ptrmutnumas*muti32;// num的作用域结束内层大括号内存被释放mut_ptr成为悬垂裸指针}// 危险解引用悬垂裸指针编译器不报错运行时行为未定义unsafe{// 以下代码可能崩溃、打印乱码或意外修改其他内存的数据// println!(悬垂裸指针解引用{}, *mut_ptr);// *mut_ptr 200; // 破坏其他内存数据导致程序异常}println!(程序未崩溃但悬垂裸指针已存在安全风险);}// 运行结果// 程序未崩溃但悬垂裸指针已存在安全风险关键提醒悬垂裸指针的风险在于“编译器无法检测”完全依赖开发者手动管理。实际开发中使用裸指针时必须严格控制指针的生命周期确保解引用时所指向的数据仍在作用域内未被释放。三、核心对比引用类型与裸指针的异同理解两者的异同是灵活运用它们的关键。我们从“相同点”“不同点”两个维度展开不同点部分用表格呈现更清晰直观同时补充关键说明帮助大家精准区分。3.1 相同点3点核心本质都是“间接访问工具”两者都不拥有所指向数据的所有权都是通过内存地址间接访问数据引用的底层也是裸指针只是被编译器封装了安全检查都分为“不可变/可变”两种类型引用类型有T不可变和mut T可变裸指针有const T不可变和mut T可变对应只读、读写两种访问权限都可指向任意数据类型无论是基本类型i32、bool等、结构体、枚举还是堆内存、栈内存中的数据两者都可以指向引用受生命周期约束裸指针无约束。3.2 不同点8点核心表格对比对比维度引用类型T / mut T裸指针*const T / *mut T安全性安全编译器严格检查编译期规避悬垂、数据竞争等问题不安全无任何编译器检查依赖开发者手动保证安全是否需要unsafe无需unsafe所有操作都在安全上下文解引用、修改等操作必须放在unsafe块中生命周期约束有生命周期约束引用生命周期 ≤ 所有者生命周期无生命周期约束易出现悬垂指针借用规则遵守借用规则不可变多引用、可变单引用互斥不遵守任何借用规则可多个可变裸指针指向同一块内存空指针允许不允许空引用编译器禁止创建空引用规避空指针风险允许空裸指针std::ptr::null()创建需手动判断非空内存操作灵活性灵活性低不能直接操作内存地址如指针偏移灵活性高可直接操作内存地址偏移、转换等使用场景日常安全编程绝大多数业务场景如函数参数传递、数据共享底层开发、FFI交互、智能指针实现特殊场景错误排查难度错误在编译期暴露排查难度低错误在运行时暴露未定义行为排查难度高3.3 关键补充引用与裸指针的转换引用和裸指针可以相互转换但转换的安全性不同需严格区分引用 → 裸指针安全转换无需unsafe仅创建裸指针不操作内存语法是T as *const T、mut T as *mut T裸指针 → 引用不安全转换必须放在unsafe块中且需手动保证裸指针有效非空、指向未释放内存、生命周期合法语法是ptr as a T、ptr as a mut T。fnmain(){letnum100;// 1. 引用 → 裸指针安全无需unsafeletconst_ptr:*consti32numas*consti32;// 2. 裸指针 → 引用不安全需unsafe手动保证指针有效unsafe{// 手动标注生命周期a这里生命周期是main函数作用域letref_from_ptr:i32const_ptrasi32;println!(裸指针转换为引用后访问{},ref_from_ptr);}}// 运行结果// 裸指针转换为引用后访问100四、拓展延伸超出基础用法的实用知识点为了让大家更全面地掌握两者的应用我们补充4个实用拓展知识点涵盖unsafe安全边界、FFI交互、智能指针与裸指针的关系、生命周期省略规则这些都是实际开发中高频用到的内容。4.1 unsafe的安全边界不是“放弃安全”而是“手动保证安全”很多初学者误以为“用了unsafe就是不安全的”其实不然——unsafe的核心是“将安全检查的责任从编译器转移给开发者”只要开发者遵守规则unsafe代码也是安全的。使用unsafe时需遵守以下4个安全原则重中之重最小化unsafe范围不要将大量代码放在unsafe块中仅将“必须用unsafe”的操作如裸指针解引用放入降低风险手动保证指针有效解引用裸指针前必须确保指针非空、指向的内存未被释放、生命周期合法避免数据竞争多个可变裸指针指向同一块内存时需手动保证“不同时修改”可通过锁Mutex等同步机制实现封装unsafe代码尽量将unsafe代码封装在函数/特质中对外提供安全的接口避免外部直接使用unsafe操作。// 示例封装unsafe代码对外提供安全接口fnsafe_modify(num:muti32,new_val:i32){// 将unsafe操作封装在函数内部外部调用无需unsafeletmut_ptrnumas*muti32;unsafe{*mut_ptrnew_val;// 内部手动保证指针有效num是有效引用}}fnmain(){letmutnum100;// 外部调用安全接口无需unsafesafe_modify(mutnum,200);println!(修改后的值{},num);}// 运行结果// 修改后的值2004.2 FFI交互裸指针是Rust与C语言的“桥梁”Rust与C/C等语言交互FFIForeign Function Interface时C语言的指针无法直接对应Rust的引用C指针无安全约束只能对应Rust的裸指针。此时裸指针的核心作用是“传递内存地址”需严格遵守C语言的内存管理规则。示例Rust调用C函数传递裸指针修改C语言中的数据// 声明要调用的C函数extern C 表示遵循C语言的调用约定externC{// C函数接收一个int*指针修改指针指向的值fnc_modify(ptr:*muti32);}fnmain(){letmutnum100;// 将Rust的可变引用转换为裸指针传递给C函数letnum_ptrmutnumas*muti32;// 调用C函数必须放在unsafe块中C函数不保证安全unsafe{c_modify(num_ptr);}println!(C函数修改后的值{},num);}// 对应的C语言代码编译为动态库供Rust调用// #include stdio.h// void c_modify(int* ptr) {// *ptr 200; // 修改Rust传递过来的内存地址的值// }关键说明调用C函数时必须放在unsafe块中因为C语言不遵守Rust的安全规则如C指针可能是悬垂指针、空指针需开发者手动保证传递的裸指针有效。4.3 智能指针与裸指针底层依赖裸指针上层提供安全接口Rust中的智能指针如Box、Rc、Arc、MutexGuard等底层本质都是通过裸指针实现的但它们封装了unsafe代码提供了安全的接口避免开发者直接操作裸指针。以Box为例最基础的智能指针用于堆内存分配Box::new(T)底层通过裸指针分配堆内存将T的值放入堆中Box::into_raw(box)将Box转换为裸指针放弃自动释放Box::from_raw(ptr)将裸指针转换为Box自动释放堆内存。智能指针的核心价值用裸指针的灵活性实现安全的内存管理让开发者既能享受堆内存、共享所有权等特性又不用承担裸指针的安全风险。4.4 引用的生命周期省略规则减少手动标注的麻烦之前的示例中我们手动标注了生命周期a但大多数情况下编译器会自动推断生命周期无需手动标注这就是“生命周期省略规则”3条核心规则函数的每个参数如果是引用类型都会被分配一个独立的生命周期参数如fn foo(a: T, b: U) → 自动推断为fn fooa, b(a: a T, b: b U)如果函数只有一个输入生命周期参数那么这个生命周期参数会被赋予所有输出生命周期参数如fn foo(a: a T) → a T如果函数的输入参数有self或mut self方法中的参数那么self的生命周期会被赋予所有输出生命周期参数最常用如结构体方法。// 示例生命周期省略无需手动标注structPerson{name:String,}implPerson{// 方法中的self生命周期自动省略输出生命周期 self的生命周期fnget_name(self)-str{self.name}}// 函数只有一个输入引用参数生命周期自动省略fnget_first_char(s:str)-char{s.chars().next().unwrap()}fnmain(){letpPerson{name:Alice.to_string()};println!(Person name: {},p.get_name());letshello;println!(First char: {},get_first_char(s));}// 运行结果// Person name: Alice// First char: h五、总结如何正确选择引用类型与裸指针通过以上内容的解析我们可以明确引用类型和裸指针不是“对立关系”而是“互补关系”核心选择原则是“能用电引用就不用裸指针”——只有在引用无法满足需求时才考虑使用裸指针并严格遵守unsafe安全规则。5.1 选择引用类型的场景90%的日常开发函数参数传递、返回值无需转移所有权仅借用访问权限数据共享只读用T读写用mut T任何不需要直接操作内存地址的场景。5.2 选择裸指针的场景10%的特殊场景底层开发需要直接操作内存地址如操作系统内核、驱动FFI交互与C/C等语言传递指针智能指针/自定义内存管理如实现自己的智能指针需要手动分配/释放内存性能优化极少数场景下需要突破引用的安全约束提升内存操作性能需谨慎优先考虑编译器优化。最后再强调一句Rust的核心优势是“内存安全”引用类型是实现这一优势的关键裸指针则是为了兼顾底层灵活性而提供的“后门”使用时必须心存

相关新闻

基于微信小程序的CET助手设计与实现

基于微信小程序的CET助手设计与实现

一、项目技术介绍 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Ma…

2026/5/17 4:36:40 阅读更多 →
基于微信小程序的高校设备报修系统

基于微信小程序的高校设备报修系统

一、项目技术介绍 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Ma…

2026/7/3 9:46:09 阅读更多 →
闭眼入!千笔·专业降AIGC智能体,碾压级的降AI率网站

闭眼入!千笔·专业降AIGC智能体,碾压级的降AI率网站

在AI技术迅猛发展的今天,越来越多的学生开始借助AI工具辅助论文写作,提升效率与质量。然而,随着知网、维普、万方等查重系统对AI生成内容的识别能力不断提升,论文中的AI痕迹问题愈发凸显,成为影响学术成果的重要隐患。…

2026/7/3 16:52:10 阅读更多 →

最新新闻

智能汽车板级接口与存储系统核心技术解析

智能汽车板级接口与存储系统核心技术解析

1. 智能汽车板级接口技术全景解析 作为一名在汽车电子领域深耕多年的工程师,我见证了车载电子系统从简单的ECU控制到如今复杂域控制器的演进历程。现代智能汽车的"大脑"——域控制器内部,各类芯片间的通信架构设计直接决定了系统性能上限。让我…

2026/7/5 10:37:10 阅读更多 →
AI服务合规网关实战:GDPR日志脱敏、国密SM4加密与审计追踪

AI服务合规网关实战:GDPR日志脱敏、国密SM4加密与审计追踪

1. 项目概述:一场迫在眉睫的合规风暴最近在排查一个线上AI服务的问题时,我遇到了一个典型的报错:cc switch deepseek unexpected status 502 bad gateway: unknown error, url: ht...。这个错误本身指向的是服务网关的切换或配置问题&#xf…

2026/7/5 10:35:10 阅读更多 →
光伏逆变器LVRT技术:Boost+NPC拓扑设计与控制策略

光伏逆变器LVRT技术:Boost+NPC拓扑设计与控制策略

1. 光伏逆变器低电压穿越技术概述 光伏发电系统在电网电压骤降时能否保持并网运行,直接关系到整个电力系统的稳定性。低电压穿越(LVRT)技术就是让逆变器在电网电压跌落时,不仅不脱网还能向电网提供无功功率支撑的关键能力。传统方案中,当检测…

2026/7/5 10:33:10 阅读更多 →
Allen Bradley 80190-378-51/12控制器板功能与应用解析

Allen Bradley 80190-378-51/12控制器板功能与应用解析

1. Allen Bradley 80190-378-51/12控制器板概述Allen Bradley 80190-378-51/12控制器板是罗克韦尔自动化旗下Allen-Bradley品牌推出的一款工业级控制电路板。作为自动化控制系统中的核心组件,它主要负责信号采集、逻辑运算和设备控制等功能。这款控制器板采用成熟的…

2026/7/5 10:31:10 阅读更多 →
解锁网易云音乐加密格式:ncmdump工具的全面应用指南

解锁网易云音乐加密格式:ncmdump工具的全面应用指南

解锁网易云音乐加密格式:ncmdump工具的全面应用指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经遇到过这样的困扰:在网易云音乐下载的歌曲只能在特定应用内播放,无法在其他设备或播…

2026/7/5 10:31:10 阅读更多 →
I型NPC三电平逆变器SVPWM仿真设计与控制策略

I型NPC三电平逆变器SVPWM仿真设计与控制策略

1. I型NPC三电平逆变器SVPWM仿真设计概述在电力电子领域,三电平逆变器因其输出电压谐波含量低、开关损耗小等优势,已成为中高压大功率应用的首选拓扑结构。I型NPC(Neutral Point Clamped)三电平逆变器通过钳位二极管将直流母线中点…

2026/7/5 10:29:09 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻