网安入门之PHP后端基础

PHP 基本概念详解

PHP是一种服务器端脚本语言,常用于动态网站开发和 web 应用程序。以下是 PHP 的基本概念与特点的详细说明:

1. PHP 文件的默认文件扩展名
  • PHP 文件的扩展名通常为 .php,例如 index.php
  • PHP 文件可以包含 PHP 代码、HTML、CSS 和 JavaScript。
  • Web 服务器会通过 PHP 解析器处理 .php 文件中的 PHP 代码,并将结果返回给浏览器。
2. PHP 脚本的位置

PHP 脚本可以嵌套在 HTML 文档的任意位置。典型的嵌套示例:

plain 复制代码
<html>
<body>
    <h1>欢迎访问我的网站</h1>
    <?php
        echo "这是一个 PHP 脚本块。";
    ?>
</body>
</html>

也可以使用纯 PHP 脚本文件,无需包含 HTML:

plain 复制代码
<?php
    echo "这是一个纯 PHP 文件。";
?>
3. PHP 脚本标记

PHP 脚本以 <?php 开头,以 ?> 结束。示例:

plain 复制代码
<?php
    echo "Hello, World!";
?>

注意:短标签 <? ... ?> 在某些服务器配置中可能被禁用,建议使用完整标签 <?php ... ?>

4. PHP 语句结束标记

PHP 中的每个语句必须以分号 (;) 结束。如果遗漏分号,可能导致解析错误。

示例:

plain 复制代码
<?php
    echo "这是第一条语句。";
    echo "这是第二条语句。";
?>
5. PHP 注释语法

**单行注释:**使用 //# 注释单行代码:

plain 复制代码
<?php
    // 这是一个单行注释
    # 这是另一个单行注释
    echo "Hello, PHP!";
?>

**多行注释:**使用 /* 开始,*/ 结束,适用于多行:

plain 复制代码
<?php
    /* 这是一个多行注释
       用于解释代码的功能或逻辑 */
    echo "多行注释结束后运行的代码。";
?>
6. PHP 是一门弱类型语言

弱类型语言意味着变量的类型可以根据赋值自动转换,无需显式声明类型。PHP 使用 $ 符号定义变量,类型可以是字符串、整数、浮点数、数组等:

plain 复制代码
<?php
    $text = "这是一个字符串";  // 字符串
    $number = 42;            // 整数
    $price = 19.99;          // 浮点数
?>

PHP 会根据上下文自动调整变量类型:

plain 复制代码
<?php
    $x = "5";
    $y = 3;
    $sum = $x + $y;  // $x 被自动转换为整数
    echo $sum;       // 输出 8
?>
7. PHP 的特点
  • 跨平台:PHP 可以运行在 Windows、Linux 和 macOS 等多种操作系统上。
  • 开源:PHP 是免费的,且有广泛的社区支持。
  • 嵌套能力:PHP 可与 HTML 紧密结合,用于生成动态内容。
  • 丰富的扩展库:PHP 提供大量扩展,用于处理数据库、文件、网络协议等。

PHP 中的变量及其类型详解

1. PHP 中变量的定义

PHP 中的变量以 $ 开头,后跟变量名。变量名必须以字母或下划线开头,后面可以跟字母、数字或下划线。变量名区分大小写。

示例:

plain 复制代码
<?php
    $name = "Alice"; // 字符串
    $age = 25;       // 整数
?>
2. PHP 变量的类型

PHP 是弱类型语言,变量的类型可以根据赋值自动确定。以下是 PHP 支持的主要变量类型:


1) 字符串 (String)

用于存储文本数据。字符串可以用单引号 ' 或双引号 " 包裹。双引号支持变量解析和转义字符,单引号不支持变量解析。

示例:

plain 复制代码
<?php
    $str1 = "Hello, PHP!";  // 双引号字符串
    $str2 = 'Hello, World!'; // 单引号字符串
    $name = "Alice";
    echo "My name is $name"; // 输出:My name is Alice
    echo 'My name is $name'; // 输出:My name is $name
?>

2) 整数 (Integer)

用于存储整数值(正数、负数或 0)。必须是无小数点的数字。支持十进制、八进制(以 0 开头)、十六进制(以 0x 开头)和二进制(以 0b 开头)。

示例:

plain 复制代码
<?php
    $int1 = 42;       // 十进制
    $int2 = 0b101010; // 二进制
    $int3 = 0x2A;     // 十六进制
    $int4 = 052;      // 八进制
    echo $int1;       // 输出:42
?>

3) 浮点数 (Float)

用于存储带小数点的数字或科学计数法表示的数字。

示例:

plain 复制代码
<?php
    $float1 = 3.14159;   // 小数
    $float2 = 1.2e3;     // 科学计数法 (1.2 * 10^3)
    $float3 = 7E-10;     // 科学计数法 (7 * 10^-10)
    echo $float1;        // 输出:3.14159
?>

4) 布尔值 (Boolean)

用于存储逻辑值:truefalse。常用于条件判断。

示例:

plain 复制代码
<?php
    $isPHPFun = true;
    $isHard = false;
    if ($isPHPFun) {
        echo "PHP is fun!";
    }
?>

5) 数组 (Array)

数组用于存储多个值。PHP 中数组分为以下三类:

索引数组 (Indexed Array): 使用数字索引。

关联数组 (Associative Array): 使用键值对,键为字符串。

多维数组 (Multidimensional Array): 包含多个数组作为其元素的数组。

a) 索引数组

元素按数字索引从 0 开始。

示例:

plain 复制代码
<?php
    $fruits = array("Apple", "Banana", "Cherry");
    echo $fruits[0]; // 输出:Apple
?>

也可以使用 [] 语法定义:

plain 复制代码
<?php
    $fruits = ["Apple", "Banana", "Cherry"];
    echo $fruits[1]; // 输出:Banana
?>
b) 关联数组

元素使用字符串作为键。

示例:

plain 复制代码
<?php
    $person = array(
        "name" => "Alice",
        "age" => 25,
        "city" => "New York"
    );
    echo $person["name"]; // 输出:Alice
?>
c) 多维数组

数组的元素可以是另一个数组。

示例:

plain 复制代码
<?php
    $matrix = array(
        array(1, 2, 3),
        array(4, 5, 6),
        array(7, 8, 9)
    );
    echo $matrix[1][2]; // 输出:6
?>

6) 对象 (Object)

PHP 使用类和对象支持面向对象编程。

示例:

plain 复制代码
<?php
    class Person {
        public $name;
        public $age;

        function __construct($name, $age) {
            $this->name = $name;
            $this->age = $age;
        }

        function greet() {
            return "Hello, my name is $this->name and I am $this->age years old.";
        }
    }

    $person = new Person("Alice", 25);
    echo $person->greet(); 
    // 输出:Hello, my name is Alice and I am 25 years old.
?>

7) NULL

NULL 是一个特殊的值,用于表示变量没有值。可以通过赋值 NULL 来清空变量。

示例:

plain 复制代码
<?php
    $var = "Hello, PHP!";
    $var = NULL; // 现在 $var 没有值
?>

3. 变量类型的动态转换

PHP 会根据上下文自动转换变量类型(类型转换)。

示例:

plain 复制代码
<?php
    $x = "5";
    $y = 10;
    $sum = $x + $y; // 自动将 $x 转换为整数
    echo $sum;      // 输出:15
?>

如何自定义 PHP 变量

在 PHP 中,变量是用来存储数据的标识符,可以是任何类型的值,例如字符串、整数、数组等。以下是自定义变量的详细规则和示例:

1. 使用 **$** 定义变量

所有变量必须以美元符号($)开头。后面紧跟变量的名称,这个名称可以是一个有效的标识符。赋值时,使用等号 = 将值赋给变量。

示例

plain 复制代码
<?php
    $name = "Alice";  // 定义变量 $name,并赋值为字符串 "Alice"
    $age = 25;        // 定义变量 $age,并赋值为整数 25
    $isStudent = true; // 定义变量 $isStudent,并赋值为布尔值 true
?>

2. 变量名称规则
(1) 变量名称不能以数字开头

变量名必须以字母或下划线开头。

不允许以下格式:

plain 复制代码
<?php
    $1var = "Invalid"; // 错误
    $123name = "Invalid"; // 错误
?>

正确的格式:

plain 复制代码
<?php
    $var1 = "Valid"; // 正确
    $_name = "Valid"; // 正确
?>
(2) 变量名称只能包含字母、数字和下划线

有效字符包括字母 (A-Z, a-z)、数字 (0-9) 和下划线 _

不允许的格式:

plain 复制代码
<?php
    $my-var = "Invalid"; // 错误,包含非法字符 "-"
    $my var = "Invalid"; // 错误,包含空格
?>

正确的格式:

plain 复制代码
<?php
    $my_var = "Valid"; // 正确,使用下划线
    $var123 = "Valid"; // 正确,包含数字
?>
(3) 变量名称对大小写敏感

PHP 中的变量名称是区分大小写的。

示例:

plain 复制代码
<?php
    $name = "Alice";
    $Name = "Bob";
    echo $name; // 输出:Alice
    echo $Name; // 输出:Bob
?>

$name$Name 是两个不同的变量。

3. 变量的赋值与初始化

变量在第一次赋值时被初始化。PHP 中未赋值的变量默认为 NULL,但建议显式赋值。

示例

plain 复制代码
<?php
    $count = 10;      // 定义并初始化变量
    $text = "Hello";  // 定义字符串变量
    $empty;           // 未初始化变量,默认为 NULL
    echo $empty;      // 输出为空
?>

4. 动态变量

PHP 支持动态变量,即变量的名称可以由另一个变量的值确定。

示例:

plain 复制代码
<?php
    $varName = "greeting"; // 定义变量名
    $$varName = "Hello, World!"; // 定义动态变量
    echo $greeting; // 输出:Hello, World!
?>

解释:$$varName 等价于 $greeting

5. 命名约定与最佳实践

遵循清晰和语义化的命名规则:变量名应该能够描述其用途。

不推荐:

plain 复制代码
<?php
    $x = "Alice"; // 变量名没有意义
    $y = 25;      // 变量名模糊
?>

推荐:

plain 复制代码
<?php
    $userName = "Alice"; // 清晰的变量名
    $userAge = 25;       // 变量名具有语义
?>

使用驼峰式命名下划线命名

驼峰式命名:$userName, $productPrice

下划线命名:$user_name, $product_price

避免使用保留字作为变量名 :如 class, function, echo 等。

6. 变量的作用域

全局变量:定义在函数外部,作用域为整个脚本。

局部变量:定义在函数内部,仅在函数内可用。

示例:

plain 复制代码
<?php
    $globalVar = "I am global"; // 全局变量

    function testScope() {
        $localVar = "I am local"; // 局部变量
        echo $localVar; // 输出:I am local
    }

    testScope();
    echo $globalVar; // 输出:I am global
    // echo $localVar; // 错误:未定义
?>

PHP 预定义超全局变量

PHP 的 超全局变量 是一组预定义的变量,可以在脚本的任何地方使用,而无需显式地声明为 global。它们为处理用户输入、服务器环境信息、会话数据等提供了便利。

1. $GLOBALS

功能 :包含所有全局作用域的变量。它是一个超全局数组,变量名作为键。作用:在函数或方法中访问全局变量。

示例

plain 复制代码
<?php
    $x = 10;
    $y = 20;

    function calculateSum() {
        $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; // 使用$GLOBALS访问全局变量
    }

    calculateSum();
    echo $z; // 输出:30
?>

2. $_SERVER

功能:存储服务器和执行环境的信息。它是一个数组,包含诸如请求头、路径和脚本位置等信息。

常用键值

$_SERVER['PHP_SELF']:当前执行脚本的文件名。

$_SERVER['SERVER_NAME']:服务器的主机名。

$_SERVER['HTTP_HOST']:当前请求的主机头。

$_SERVER['REMOTE_ADDR']:客户端的 IP 地址。

$_SERVER['REQUEST_METHOD']:请求方法(如 GET、POST)。

$_SERVER['QUERY_STRING']:URL 中的查询字符串。

  • 示例
plain 复制代码
<?php
    echo $_SERVER['PHP_SELF']; // 输出当前脚本名
    echo $_SERVER['SERVER_NAME']; // 输出服务器名
    echo $_SERVER['REMOTE_ADDR']; // 输出客户端 IP
?>

3. $_GET(很常见)

功能:通过 URL 的查询字符串传递的变量。

用途:接收通过 HTTP GET 方法发送的数据。

特点

数据附加在 URL 后(如 example.com/index.php?name=Alice)。适合小型、非敏感数据的传递。

示例

plain 复制代码
<?php
    // URL: example.com/index.php?name=Alice&age=25
    $name = $_GET['name']; // 获取 URL 中的 name 参数
    $age = $_GET['age'];   // 获取 URL 中的 age 参数
    echo "Name: $name, Age: $age"; // 输出:Name: Alice, Age: 25
?>

4. $_POST(网安在抓包的时候经常看到POST请求)

功能:通过 HTTP POST 方法传递的变量。

用途:接收表单中通过 POST 方法发送的数据。

特点:数据不会显示在 URL 中,适合传递大量或敏感数据。

示例

plain 复制代码
<?php
    // 表单提交后接收数据
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $username = $_POST['username'];
        $password = $_POST['password'];
        echo "Username: $username, Password: $password";
    }
?>

5. $_REQUEST

功能:包含通过 GET、POST 或 COOKIE 方法传递的所有输入。

用途:访问用户输入的通用方法,但推荐使用 $_GET 和 $_POST 来明确区分来源。

示例

plain 复制代码
<?php
    $name = $_REQUEST['name']; // 可能来自 GET 或 POST
    echo "Hello, $name!";
?>

6. $_SESSION

功能 :存储会话变量,用于跨页面维持用户数据。特点

需要启动会话:session_start()

数据存储在服务器端。

数据会在浏览器关闭后失效,除非配置会话持续时间。

示例

plain 复制代码
<?php
    session_start(); // 开启会话
    $_SESSION['user'] = "Alice"; // 设置会话变量
    echo $_SESSION['user']; // 输出:Alice
?>

功能:通过客户端存储的小型数据,用于持久化跨会话的信息。

特点

数据存储在客户端浏览器中。

设置 Cookie 使用 setcookie()

示例

plain 复制代码
<?php
    // 设置一个 Cookie
    setcookie("username", "Alice", time() + 3600); // 1小时有效
    echo $_COOKIE['username']; // 输出:Alice
?>

8. $_FILES

功能:处理文件上传的数据。

用途:在表单中上传文件,并获取文件信息。

常用键值

$_FILES['file']['name']:文件名。

$_FILES['file']['tmp_name']:临时文件的路径。

$_FILES['file']['size']:文件大小。

$_FILES['file']['error']:错误代码。

示例

plain 复制代码
<?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $fileName = $_FILES['file']['name'];
        $tmpPath = $_FILES['file']['tmp_name'];
        move_uploaded_file($tmpPath, "uploads/" . $fileName); // 保存文件
        echo "File uploaded: $fileName";
    }
?>

总结表

超全局变量 用途 备注
$GLOBALS 全局作用域的所有变量 用于函数中访问全局变量
$_SERVER 服务器和环境信息 提供请求头、服务器信息等
$_GET URL 查询字符串的数据 数据可见于 URL,适合小型数据传递
$_POST 表单通过 POST 提交的数据 数据不显示在 URL,适合敏感数据传递
$_REQUEST GET、POST 或 COOKIE 数据的集合 不推荐用于明确来源的数据
$_SESSION 会话变量 数据存储在服务器端,需启动会话
$_COOKIE 客户端存储的小型数据 数据存储于客户端浏览器
$_FILES 文件上传相关信息 处理文件上传表单的数据

HTTP GET 和 POST 方法的区别

在 HTTP 协议中,GET 和 POST 是最常用的两种请求方法,用于客户端与服务器之间的数据交互。虽然它们的功能相似,但在用途和技术实现上有显著差异。

1. 数据传输方式

GET POST
通过 URL 的查询字符串传输数据 通过请求体(Body)传输数据
数据直接附加在 URL 后,形式为 example.com?name=Alice&age=25 数据不显示在 URL 中,嵌入请求体,形式不可见。

2. 数据长度限制

GET POST
数据长度有限制,因为 URL 的长度受到浏览器和服务器的限制(通常为 2048 个字符)。 无明显长度限制,可传输大量数据,具体限制取决于服务器设置。

3. 数据安全性

GET POST
安全性较低,因为数据包含在 URL 中,容易被拦截或记录在浏览历史中。 相对安全,数据存储在请求体中,不会出现在浏览器地址栏,但仍需使用 HTTPS 保护。

4. 数据用途

GET POST
用于请求数据。典型用途是获取资源,如网页或 API 数据。 用于提交数据。典型用途是提交表单或上传文件。
示例:查询用户信息。 示例:登录、注册。

5. 可缓存性

GET POST
可以被缓存。浏览器和中间代理服务器会缓存 GET 请求。 不会被缓存。每次都会提交新的请求。

6. 浏览器行为

GET POST
可通过浏览器的地址栏直接输入或保存为书签。 不能通过地址栏直接输入,也不能保存为书签。
可被搜索引擎索引。 不会被搜索引擎索引。

7. 常用场景

GET POST
适用于查询操作,如搜索页面或获取资源信息。 适用于需要对服务器进行修改或提交敏感数据的操作。
示例:在线搜索、分页。 示例:提交表单、上传文件。

8. 示例代码

GET 示例
plain 复制代码
<?php
    // URL: example.com/index.php?name=Alice&age=25
    echo "Name: " . $_GET['name']; // 获取 GET 参数
    echo "Age: " . $_GET['age'];
?>
POST 示例
plain 复制代码
<form method="post" action="submit.php">
    Name: <input type="text" name="name">
    Age: <input type="text" name="age">
    <input type="submit">
</form>
plain 复制代码
<?php
    echo "Name: " . $_POST['name']; // 获取 POST 参数
    echo "Age: " . $_POST['age'];
?>

总结表

特点 GET POST
数据传输方式 数据附加在 URL 后,通过查询字符串传输 数据存储在请求体中,隐式传输
数据长度限制 有限,依赖于 URL 长度限制 理论上无限,但受服务器配置影响
数据安全性 较低,数据可被记录或拦截 较高,数据不可见,但需要 HTTPS 保护
数据用途 适合获取资源或查询 适合提交表单或敏感数据
可缓存性 可以缓存 不会缓存
浏览器支持 支持通过地址栏直接访问,URL 可分享 不支持通过地址栏访问,无法直接分享
常见用途 搜索、查询、分页 登录、注册、提交表单、文件上传

PHP函数

1. echo

作用 :输出字符串或变量到页面。用途:在调试时显示变量值,生成页面内容。

特点

不返回值,直接输出。

可输出多个字符串,逗号分隔。

示例

plain 复制代码
$message = "Hello, World!";
echo $message; // 输出 Hello, World!
echo "This ", "is ", "a ", "test."; // 输出 This is a test.

2. var_dump

作用:显示变量的详细信息,包括类型和值。

用途:调试时分析变量内容和数据结构。

特点

可显示复杂数据类型(如数组、对象)。

输出包括变量类型和值,调试时非常实用。

示例

plain 复制代码
$array = [1, "PHP", true];
var_dump($array); 
// 输出:
// array(3) {
//   [0]=> int(1)
//   [1]=> string(3) "PHP"
//   [2]=> bool(true)
// }

3. setcookie

作用:在客户端设置一个 cookie。

用途:用于会话管理、跟踪用户状态。

参数

1. Cookie 名称。
2. Cookie 值。
3. 过期时间(时间戳)。
4. 可选路径、域名和安全选项。

示例

plain 复制代码
setcookie("user", "Alice", time() + 3600, "/"); 
// 设置一个名为 user 的 cookie,有效期为 1 小时。

4. session_start

作用:启动一个会话,或恢复现有会话。

用途:用于保存用户状态信息,例如登录状态。

特点

必须在任何输出之前调用。

默认会话数据存储在服务器上,通过客户端的 session ID 匹配。

示例

plain 复制代码
session_start(); // 开启会话
$_SESSION['user'] = 'Alice'; // 设置会话变量
echo $_SESSION['user']; // 输出会话变量值

补充的安全相关 PHP 函数

在学习和实践网络安全时,这些 PHP 函数可以帮助保护应用程序免受常见漏洞的影响,并用于开发安全的代码。以下是详细的介绍:

1. 文件操作相关

**file_get_contents()**

作用:读取文件内容并以字符串形式返回。

用途:用于检测本地文件包含漏洞(LFI)或远程文件包含漏洞(RFI)。

示例

plain 复制代码
$content = file_get_contents("config.txt"); 
echo $content; // 输出文件内容

**file_put_contents()**

作用:将数据写入文件(覆盖或追加)。

用途:测试文件操作漏洞或用于日志记录。

示例

plain 复制代码
file_put_contents("log.txt", "Unauthorized access detected\n", FILE_APPEND);

**unlink()**

作用:删除指定文件。

用途:用于清理敏感文件或测试文件删除权限。

示例

plain 复制代码
if (file_exists("temp.txt")) {
    unlink("temp.txt"); // 删除临时文件
}

2. 用户输入处理

**htmlspecialchars()**

作用:将 HTML 特殊字符转换为实体,防止 HTML 注入。

用途:防止 XSS(跨站脚本攻击)。

示例

plain 复制代码
$user_input = '<script>alert("XSS")</script>';
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8'); 
// 输出:&lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;

**strip_tags()**

作用:移除字符串中的 HTML 和 PHP 标签。

用途:用于对用户输入的基本清理。

示例

plain 复制代码
$input = '<p>Hello <b>World</b></p>';
echo strip_tags($input); // 输出:Hello World

**addslashes()**

作用:在字符串中的引号前添加反斜杠,转义特殊字符。

用途:保护数据免受 SQL 注入攻击。

示例

plain 复制代码
$unsafe_data = "Alice's home";
$safe_data = addslashes($unsafe_data);
echo $safe_data; // 输出:Alice\'s home

3. 数据库操作

**mysqli_real_escape_string()**

作用:转义 SQL 查询中的特殊字符。

用途:防止 SQL 注入。

示例

plain 复制代码
$conn = new mysqli("localhost", "user", "password", "database");
$unsafe_input = "' OR '1'='1";
$safe_input = $conn->real_escape_string($unsafe_input);
$query = "SELECT * FROM users WHERE username = '$safe_input'";

**PDO::prepare()**

作用:使用预编译语句,防止 SQL 注入。

用途:推荐的安全数据库查询方法。

示例

plain 复制代码
$pdo = new PDO("mysql:host=localhost;dbname=test", "user", "password");
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->execute(['username' => $unsafe_input]);

4. 加密与解密

**hash()**

作用:生成字符串的哈希值。

用途:用于存储密码或验证数据完整性。

示例

plain 复制代码
$password = "securepassword";
$hashed_password = hash("sha256", $password);

**password_hash()**

作用:生成强散列密码。

用途:安全地存储用户密码。

示例

plain 复制代码
$password = "securepassword";
$hash = password_hash($password, PASSWORD_DEFAULT);

**openssl_encrypt()**** / ****openssl_decrypt()**

作用:加密或解密数据。

用途:用于传输敏感信息的保护。

示例

plain 复制代码
$data = "Sensitive Information";
$key = "encryptionkey";
$encrypted = openssl_encrypt($data, "AES-128-ECB", $key);
$decrypted = openssl_decrypt($encrypted, "AES-128-ECB", $key);

5. 网络交互与响应

**header()**

作用:发送原始 HTTP 报头。

用途:用于设置重定向、防止缓存、或指定内容类型。

示例

plain 复制代码
header("Location: login.php");

**http_response_code()**

作用:设置 HTTP 响应状态码。

用途:用于返回特定的 HTTP 状态(如 404, 500)。

示例

plain 复制代码
http_response_code(404);
echo "Page not found";

6. 全局变量管理

**$GLOBALS**

作用:访问所有全局变量。

用途:在需要跨函数共享数据时使用。

示例

plain 复制代码
$x = 10;
function test() {
    echo $GLOBALS['x']; // 输出 10
}

**session_start()**

作用:启动或恢复会话。

用途:管理用户登录状态。

示例

plain 复制代码
session_start();
$_SESSION['user'] = 'Alice';

总结

以上函数涵盖了文件操作、用户输入过滤、数据库操作、加密解密和网络交互等安全开发的关键领域。结合这些函数,您可以有效防范常见的安全漏洞(如 XSS、SQL 注入、文件包含攻击等),并提高 PHP 应用的安全性。

相关推荐
木觞清25 分钟前
Python 图像处理:生成美丽的书籍封面
开发语言·python
风_流沙28 分钟前
parquet文件数据格式介绍以及python pandas对parquet常见操作
开发语言·python·pandas
极客代码38 分钟前
深入理解C语言:编译原理
c语言·开发语言·性能优化·编译原理·代码优化
向宇it1 小时前
【从零开始入门unity游戏开发之——unity篇05】unity6基础入门——运行游戏按钮、Game游戏窗口和Project项目窗口介绍
开发语言·游戏·unity·c#·游戏引擎
征途黯然.1 小时前
大模型Agent之CrewAI框架开发指南
开发语言·python
大强的博客1 小时前
《Vue3实战教程》42:Vue3TypeScript 与组合式 API
开发语言·javascript·typescript
亲持红叶1 小时前
python schedule库
开发语言·python
尘浮生1 小时前
Java项目实战II基于小程序的驾校管理系统(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·mysql·微信小程序·小程序
山山而川粤1 小时前
酒店管理系统|Java|SSM|VUE| 前后端分离
java·开发语言·后端·学习·mysql
蓝裕安1 小时前
适配器模式(类适配器,对象适配器)
开发语言·c#