【PythonAI安全漏洞检测】:99%开发者忽略的3个高危漏洞》

第一章:PythonAI安全漏洞检测概述

在人工智能与软件系统深度融合的当下,基于Python构建的AI应用广泛应用于金融、医疗、自动驾驶等领域。然而,随着模型复杂度和系统依赖性的提升,PythonAI系统面临的安全威胁日益严峻。从恶意输入诱导模型误判,到利用代码漏洞实现远程执行,安全问题已不再局限于传统软件层面,而是延伸至数据、模型与运行环境的全链条。

安全风险的主要来源

  • 第三方库依赖污染,如PyPI中的恶意包注入
  • 模型反向攻击,通过输出推断训练数据隐私
  • 代码注入漏洞,特别是在动态执行(evalexec)场景中
  • 对抗样本攻击,干扰图像或文本识别模型判断

典型漏洞检测方法对比

方法适用场景优势局限性
静态分析源码审计无需运行,覆盖全面误报率较高
动态分析运行时监控精准捕获行为覆盖率依赖测试用例
符号执行路径探索深度挖掘潜在分支性能开销大

快速启动漏洞扫描示例

使用开源工具Bandit进行Python代码安全扫描:
# 安装Bandit
pip install bandit

# 扫描指定目录下的所有Python文件
bandit -r ./my_ai_project -f html -o report.html
上述命令将递归扫描项目目录,生成HTML格式的安全报告,重点识别使用不安全函数(如pickle.load)、硬编码密码等高风险模式。
graph TD A[源代码] --> B(静态分析引擎) C[运行时行为] --> D(动态监控模块) B --> E[漏洞候选列表] D --> E E --> F{人工验证} F --> G[确认漏洞] F --> H[误报过滤]

第二章:代码注入与数据验证漏洞

2.1 理解AI系统中的代码注入攻击原理

AI系统中的代码注入攻击通常发生在模型接收外部输入并动态执行代码的场景中。攻击者通过构造恶意输入,诱导系统执行非预期的代码逻辑。
常见攻击向量
  • 用户输入未经过滤直接传入解释器
  • 提示词(Prompt)中嵌入可执行指令
  • 插件或工具调用时参数被篡改
示例:Python eval() 漏洞利用

user_input = "__import__('os').system('rm -rf /')"
result = eval(user_input)  # 危险!将执行系统命令
该代码展示了使用 eval() 执行用户输入的风险。当输入包含构造好的表达式时,可触发任意命令执行。应避免使用动态求值函数,或严格限制执行上下文。
防御策略对比
策略有效性适用场景
输入白名单过滤固定指令集
沙箱环境执行极高不可信代码运行

2.2 利用动态分析检测潜在注入点

动态分析通过监控程序运行时行为,识别未被静态扫描捕获的注入风险点。相比静态分析,其优势在于能观察数据在执行路径中的实际流动。
常见动态检测手段
  • 污点追踪:标记用户输入为“污点源”,跟踪其是否未经净化进入敏感函数
  • 插桩技术:在关键API调用前后插入探针,记录参数值与调用栈
  • 异常监控:捕获SQL语法错误、命令执行回显等注入特征
代码示例:基于Python的简单污点传播检测

def track_input(user_data):
    taint = True  # 标记为污点数据
    query = f"SELECT * FROM users WHERE name = '{user_data}'"
    if taint and "execute" in query:  # 模拟敏感操作检查
        print(f"[ALERT] Tainted data used in query: {query}")
该代码模拟了污点数据的传播逻辑。当用户输入被标记为污点(taint=True)并拼接进SQL语句时,系统触发告警,提示存在注入风险。
检测效果对比
方法覆盖率误报率
静态分析70%15%
动态分析90%8%

2.3 输入数据验证机制的构建与测试

在现代Web应用中,输入数据验证是保障系统安全与稳定的关键环节。为确保前端传入的数据符合预期格式与业务规则,需在服务端构建多层校验机制。
基础字段验证策略
采用结构化标签对请求体进行自动绑定与校验,例如使用Go语言中的validator库:
type UserRequest struct {
    Username string `json:"username" validate:"required,min=3,max=32"`
    Email    string `json:"email"    validate:"required,email"`
    Age      int    `json:"age"      validate:"gte=0,lte=150"`
}
上述代码通过结构体标签定义了用户名、邮箱和年龄的约束条件。框架在反序列化时自动触发验证,若不符合规则则返回400错误。
验证流程与错误反馈
验证失败时应统一返回结构化错误信息,便于前端解析处理:
字段错误类型提示信息
usernamemin用户名至少3个字符
emailemail邮箱格式无效
结合单元测试覆盖边界值与异常路径,确保验证逻辑的可靠性。

2.4 实战:在PyTorch前端拦截恶意张量注入

在深度学习系统中,模型输入的完整性至关重要。攻击者可能通过构造恶意张量实施注入攻击,破坏模型推理或窃取敏感信息。为防范此类风险,需在PyTorch前端构建输入校验机制。
输入张量合法性检查
可通过重写模型的 forward 方法或使用前置钩子(hook)对输入进行拦截:
def input_guard_hook(module, input):
    x = input[0]
    if not torch.is_tensor(x):
        raise ValueError("输入必须为Tensor类型")
    if not torch.isfinite(x).all():
        raise ValueError("检测到非法值(Inf/NaN)")
    if x.abs().max() > 1e5:
        raise ValueError("张量数值超出合理范围")
    return None
该钩子函数注册后会在每次前向传播前执行,确保输入张量符合预期分布与数据特性。
防御策略对比
策略实现复杂度适用场景
钩子拦截通用模型防护
自定义Dataset训练阶段预处理

2.5 防护策略对比:白名单 vs 运行时监控

在应用安全防护中,白名单机制与运行时监控代表了两种典型的技术路径。前者基于“允许已知安全行为”的原则,后者则侧重于“检测异常行为”。
白名单机制
白名单通过预先定义合法的输入、路径或行为模式,拒绝所有未授权项。其优势在于低误报率和高执行效率。
// 示例:HTTP 请求路径白名单校验
var allowedPaths = map[string]bool{
    "/api/v1/user": true,
    "/api/v1/order": true,
}
if !allowedPaths[r.URL.Path] {
    http.Error(w, "Access denied", http.StatusForbidden)
    return
}
该代码通过哈希表实现 O(1) 路径匹配,适用于静态规则场景,但难以应对动态攻击变种。
运行时监控
运行时监控通过行为分析实时识别异常,如系统调用序列、内存访问模式等。它能捕获未知威胁,但可能产生较高误报。
维度白名单运行时监控
防护精度高(已知安全)中(依赖模型)
维护成本
对抗0-day

第三章:模型供应链安全风险

3.1 预训练模型加载中的反序列化隐患

在深度学习实践中,预训练模型常通过序列化文件(如PyTorch的`.pt`或`.pth`)进行保存与加载。然而,反序列化过程存在潜在安全风险,尤其是在不可信来源模型文件的场景下。
反序列化执行风险
PyTorch的torch.load()默认使用Python的pickle模块,而pickle在反序列化时可能执行任意代码。

import torch

# 危险操作:直接加载外部模型
model = torch.load('untrusted_model.pth')  # 可能触发恶意代码执行
该调用在后台会还原对象状态,若文件被篡改,可植入__reduce__等魔术方法执行系统命令。
安全加载策略
推荐仅加载模型权重,并使用map_locationweights_only=True(PyTorch 2.0+)限制执行:

# 安全方式:仅加载权重
model.load_state_dict(torch.load('trusted_weights.pth', weights_only=True))
此模式禁止执行任意代码,大幅降低反序列化攻击面。

3.2 第三方依赖库的漏洞传播路径分析

现代软件系统广泛依赖第三方库,其漏洞可能通过依赖链逐层传播。当一个被广泛引用的底层库存在安全缺陷时,所有依赖它的上游组件都会继承该风险。
常见传播路径
  • 直接引入存在CVE漏洞的版本
  • 间接依赖未及时更新的嵌套依赖
  • 构建工具自动解析带来的隐式依赖
代码示例:检测依赖树中的高危组件

# 使用npm audit检查Node.js项目依赖
npm audit --audit-level high
该命令扫描package-lock.json中所有依赖及其子依赖,识别已知安全漏洞,并按严重等级过滤输出。输出结果包含漏洞ID、路径、修复建议等信息,帮助开发者定位传播源头。
传播影响范围
层级组件漏洞状态
1lodash < 4.17.21存在原型污染
2moment间接引入 lodash
3my-app暴露漏洞攻击面

3.3 实战:使用safety和bandit扫描AI项目依赖

在AI项目开发中,第三方依赖的安全性常被忽视。`safety` 和 `bandit` 是两款轻量级安全扫描工具,分别用于检测已知漏洞依赖和Python代码中的安全缺陷。
安装与基础使用
pip install safety bandit
safety check -r requirements.txt
bandit -r .
上述命令将检查依赖文件中的已知CVE漏洞,并对项目源码进行静态安全分析。`-r` 参数指定递归扫描目录,适用于大型AI工程。
集成到CI/CD流程
  • safety 可输出JSON格式报告:safety check --json
  • bandit 支持自定义插件和配置文件,提升误报过滤能力
  • 两者均可设置阈值,失败时返回非零退出码,便于自动化拦截
通过持续集成阶段引入双工具联动,可有效降低AI系统因依赖或编码不当引发的安全风险。

第四章:推理阶段的对抗性攻击防御

4.1 对抗样本生成原理与FGSM实战演示

对抗样本是通过在原始输入上添加微小扰动,导致模型产生错误预测的样本。其核心思想是利用模型梯度信息,沿损失函数上升方向调整输入数据。
快速梯度符号法(FGSM)原理
FGSM是一种基于梯度的攻击方法,公式为: $$x' = x + \epsilon \cdot \text{sign}(\nabla_x J(\theta, x, y))$$ 其中,$\epsilon$ 控制扰动强度,$\nabla_x$ 表示对输入 $x$ 的梯度。
代码实现

import torch
import torch.nn as nn

def fgsm_attack(image, epsilon, data_grad):
    # 获取梯度符号
    sign_data_grad = data_grad.sign()
    # 生成对抗样本
    perturbed_image = image + epsilon * sign_data_grad
    return perturbed_image
该函数接收图像、扰动系数和梯度,输出添加符号梯度后的对抗样本。epsilon 越大,扰动越明显,但可能影响人类感知。
应用场景
  • 模型鲁棒性测试
  • 安全敏感领域的防御训练
  • 理解深度学习脆弱性

4.2 模型鲁棒性检测框架搭建(Foolbox集成)

在深度学习模型部署前,评估其对抗样本的鲁棒性至关重要。Foolbox 是一个基于 PyTorch 和 TensorFlow 的开源对抗攻击库,支持多种标准攻击方法,便于快速构建鲁棒性测试框架。
环境依赖与安装
使用 Foolbox 需确保已安装兼容版本的深度学习框架:
pip install foolbox
pip install torch torchvision
该命令安装核心库及 PyTorch 支持模块,为后续对抗样本生成提供基础。
构建基础检测流程
以下代码初始化一个预训练模型并封装为可微分模型:
import foolbox as fb
import torch
model = torch.hub.load('pytorch/vision', 'resnet18', pretrained=True)
fmodel = fb.PyTorchModel(model, bounds=(0, 1), device="cuda")
其中,bounds 定义输入值域,fmodel 提供统一接口用于攻击方法调用。
支持攻击类型对比
攻击名称类型是否需目标类
PGD迭代
Carlini-Wagner优化基
Fast Gradient Sign单步

4.3 输入预处理层的安全加固方法

在现代Web应用架构中,输入预处理层是抵御恶意请求的第一道防线。通过规范化、验证和过滤用户输入,可有效防范注入攻击、XSS及CSRF等常见威胁。
输入验证与白名单机制
采用严格的白名单策略对输入内容进行校验,仅允许符合预期格式的数据通过。例如,针对邮箱字段使用正则表达式匹配:
// 邮箱格式校验示例
func validateEmail(email string) bool {
    pattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`
    matched, _ := regexp.MatchString(pattern, email)
    return matched
}
该函数通过预定义正则模式确保输入符合标准邮箱格式,拒绝潜在恶意构造字符串。
安全过滤与编码输出
对不可避免的富文本输入,应使用安全库(如OWASP Java Encoder或Node.js的DOMPurify)进行上下文相关编码,防止脚本注入。
输入类型推荐处理方式
用户名去除特殊字符,长度限制
搜索关键词HTML实体编码后存储
富文本内容使用 sanitizer 库净化标签

4.4 检测并拦截异常梯度行为

在深度学习训练过程中,异常梯度可能导致模型发散或收敛不稳定。通过引入梯度监控机制,可实时检测梯度过大或NaN/Inf等异常情况。
梯度裁剪实现
使用PyTorch的梯度裁剪功能防止梯度爆炸:
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
该方法将所有参数的梯度范数裁剪至不超过max_norm,确保优化过程稳定。
自定义梯度钩子
可通过注册反向传播钩子监控每层梯度:
  • 在关键层注册register_backward_hook
  • 检查梯度张量是否存在NaN或超出阈值
  • 触发告警或中断训练流程
指标正常范围处理策略
梯度L2范数< 10记录日志
NaN梯度不允许终止训练

第五章:未来趋势与防护体系构建

零信任架构的实践落地
现代企业网络边界日益模糊,零信任模型成为主流安全范式。实施时需遵循“永不信任,始终验证”原则。典型部署包括微隔离、持续身份验证和最小权限访问控制。
  • 用户与设备必须通过多因素认证(MFA)接入系统
  • 所有访问请求需经策略决策点(PDP)动态评估
  • 使用SDP(软件定义边界)隐藏关键服务入口
自动化响应机制设计
为应对高级持续性威胁(APT),构建SOAR(安全编排、自动化与响应)平台至关重要。某金融客户通过集成SIEM与EDR系统,将平均响应时间从45分钟缩短至90秒。
// Go示例:自动封禁异常IP
func BlockMaliciousIP(ip string) error {
    cmd := exec.Command("iptables", "-A", "INPUT", "-s", ip, "-j", "DROP")
    if err := cmd.Run(); err != nil {
        log.Printf("封禁失败: %s", ip)
        return err
    }
    log.Printf("已封禁恶意IP: %s", ip)
    return nil
}
AI驱动的威胁狩猎
利用机器学习分析用户行为基线(UEBA),可识别内部威胁。某云服务商训练LSTM模型检测API调用异常,成功发现3起隐蔽的数据外泄事件。
技术方向应用场景部署周期
零信任网络远程办公接入8-12周
AI日志分析异常登录检测4-6周
[终端] → [身份验证网关] → [策略引擎] → [微隔离网络] → [数据层]
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 依据所提供的文件资料,可以归纳出以下关于“数字三角形 C++”的相关知识要点: ## 数字三角形问题概述 数字三角形问题是指在一个由数字构成的三角形中,寻找一条从顶部到底部的路径,使得该路径上数字的总和达到最大值。这个问题可以通过动态规划技术进行求解。 ### 问题定义 给定一个数字三角形,其结构如下所示: ``` 3 7 4 2 4 6 8 5 9 3 ``` 目标是从顶端出发到达最底端的一行,并找到一条路径,使得该路径上数字的累计值最大。例如,在上述示例中,路径 `3 → 7 → 4 → 9` 的总和为 23,这是所有可能路径中的最大数值。 ### 动态规划算法 #### 解决思路 1. **初始设定**:假定三角形的第0行为1个元素,第1行为2个元素,依此类推。 2. **递推关系式**:对于每一个位置 `(row, col)`,可以选择下一行的两个相邻元素之一进行相加,即 `tridata[row][col] += max(tridata[row+1][col], tridata[row+1][col+1])`。 3. **求解终点**:最终的最大值位于三角形的顶端位置,即 `tridata[0][0]`。 #### 算法步骤 1. **输入阶段**:读取用户输入的三角形高度 `n` 以及各节点的数值。 2. **计算环节**:从倒数第二行开始,逐行逐列更新每个节点的值。 3. **结果输出**:输出计算得出的最大路径和。 ### 示例代码解析 ```cpp int GetMax(int tridata[20][20], int &Num) { // 从倒数第二行开始...
内容概要:本文系统研究了同步电机与构网型变流器在低惯量电力系统中的频率稳定性问题,重点基于IEEE9节点系统构建混合拓扑结构,开展电磁暂态仿真分析。研究涵盖了构网型变流器的多种先进控制策略建模与对比,包括下垂控制、虚拟同步机控制(VSM)、匹配控制及可调度虚拟振荡器控制(dVOC),深入探讨其对系统频率响应特性的影响。同时,研究集成了基于KPCA的故障检测方法、储能系统以经济效益最大化为目标的运行优化策略,并结合Matlab/Simulink平台实现了完整的仿真验证体系,为高比例新能源接入下的电力系统稳定运行提供了理论支持与技术路径。; 适合人群:具备电力系统分析、自动控制理论及新能源并网技术背景的科研人员与工程技术人员,特别适用于从事微电网控制、变流器建模、频率稳定与低惯量系统研究的研究生、高校教师及电力领域研发工程师。; 使用场景及目标:①用于高校与科研机构中对构网型变流器控制策略的教学演示与仿真验证;②支撑低惯量电力系统中频率稳定问题的机理分析与解决方案设计;③为实际工程中储能配置、故障快速识别与优化运行提供仿真工具链与决策依据。; 阅读建议:建议结合文中提供的Matlab/Simulink代码资源进行动手实践,重点关注不同控制策略的模型搭建细节、参数 tuning 过程及仿真结果的动态对比分析,同时关注故障检测与储能优化模块的集成实现方式,推荐通过公众号“荔枝科研社”获取完整资料包与技术支持,以全面提升仿真复现与科研创新能力。
标题SpringBoot学生成绩信息管理系统安全设计与实现AI更换标题第1章引言介绍学生成绩信息管理系统安全设计的研究背景、意义、现状及论文方法与创新点。1.1研究背景与意义阐述学生成绩信息管理系统安全设计的重要性与必要性。1.2国内外研究现状分析国内外学生成绩信息管理系统安全设计的研究进展。1.3研究方法以及创新点概述本文的研究方法及在安全设计方面的创新点。第2章相关理论总结和评述学生成绩信息管理系统安全设计的相关理论。2.1信息安全基础理论阐述信息安全的基本概念、原则及重要性。2.2Web应用安全理论介绍Web应用安全漏洞、攻击手段及防御策略。2.3SpringBoot安全机制概述SpringBoot框架提供的安全机制及配置方法。第3章系统安全需求分析详细分析学生成绩信息管理系统的安全需求。3.1用户身份认证需求分析系统对用户身份认证的需求及安全要求。3.2数据传输安全需求阐述数据传输过程中的安全需求及加密技术。3.3数据存储安全需求介绍数据存储的安全需求及数据库安全策略。第4章系统安全设计详细介绍学生成绩信息管理系统的安全设计方案。4.1系统架构安全设计设计系统的整体架构,确保架构层面的安全性。4.2身份认证与授权设计设计用户身份认证和授权机制,确保用户合法访问。4.3数据传输与存储安全设计设计数据传输和存储的安全方案,保障数据安全性。第5章系统安全实现阐述学生成绩信息管理系统安全设计的具体实现过程。5.1开发环境与工具选择介绍系统开发所使用的环境和工具。5.2安全功能模块实现详细描述各安全功能模块的实现代码和逻辑。5.3系统测试与优化对系统进行安全测试,发现并修复潜在的安全漏洞。第6章研究结果呈现系统安全设计实现后的实验分析结果。6.1系统安全性能测试结果展示系统在不同安全测试场景下的性能表现。6.2安全漏洞修复情况介绍系统安全测试中发现并修复的安全漏洞情况。6.3
标题SpringBoot社区电子商务系统的设计与实现AI更换标题第1章引言介绍社区电子商务系统的发展背景、研究意义及SpringBoot技术的应用价值。1.1研究背景与意义阐述社区电子商务系统的兴起背景及其在社区服务中的重要性。1.2国内外研究现状分析国内外社区电子商务系统的研究现状及发展趋势。1.3研究方法及创新点概述本文采用的研究方法及SpringBoot技术应用的创新点。第2章相关理论总结SpringBoot框架及电子商务系统相关理论,为系统设计提供理论基础。2.1SpringBoot框架概述介绍SpringBoot框架的特点、优势及在Web开发中的应用。2.2电子商务系统理论基础阐述电子商务系统的基本概念、功能模块及关键技术。2.3社区电子商务系统特点分析社区电子商务系统的独特性,如社区化、本地化等。第3章系统需求分析对社区电子商务系统进行详细的需求分析,明确系统功能和性能要求。3.1用户需求分析分析社区用户、商家及管理员等不同角色的需求。3.2功能需求分析列举系统应具备的主要功能,如商品展示、购物车、订单管理等。3.3性能需求分析提出系统在响应时间、并发处理等方面的性能要求。第4章系统设计详细介绍社区电子商务系统的设计方案,包括架构设计、数据库设计等。4.1系统架构设计给出系统的整体架构,包括前端、后端及数据库等组成部分。4.2数据库设计设计系统的数据库结构,包括表结构、字段定义及关系等。4.3模块设计详细介绍各个功能模块的设计思路及实现方法。第5章系统实现与测试阐述社区电子商务系统的实现过程,并进行系统测试以验证功能。5.1系统开发环境介绍系统开发所使用的软件、硬件环境及开发工具。5.2系统实现过程按照模块划分,详细介绍系统的实现步骤及关键代码。5.3系统测试与优化对系统进行功能测试、性能测试,并根据测试结果进行优化。第6章结论与展望总结社区电子商务系统的设计与
内容概要:本文档系统性地整理了基于Matlab/Simulink平台的水声网络(UAN)信道建模及其他多个科研领域的仿真代码资源,重点聚焦于水声通信环境中信道特性的建模与仿真,涵盖声波传播的衰减、时延、多径效应等关键因素。资源不仅包含水声信道建模,还广泛涉及智能优化算法、机器学习、路径规划、电力系统、信号处理、无人机控制、雷达追踪、图像处理等多个前沿科研方向,提供大量可用于学术复现、算法验证与性能评估的Matlab代码实例。文档强调科研过程中“借力”成熟工具与创新思维相结合的重要性,引导研究者高效开展仿真工作。; 适合人群:具备Matlab编程基础,从事通信工程、海洋工程、电子信息、自动化、电力系统及相关交叉学科的研究生、科研人员及工程技术人员,尤其适合研究水声通信、无线传感网络、智能优化算法应用等方向的学者; 使用场景及目标:① 学习并复现水声网络中的信道建模方法,深入理解水下声学传播特性及其对通信系统的影响;② 利用所提供的丰富代码资源进行学术论文复现、课题仿真验证、算法优化与性能对比;③ 借助跨领域案例拓展研究视野,提升科研效率,支撑学位论文撰写、项目申报及高水平期刊投稿; 阅读建议:建议读者结合文档提供的网盘资源,优先关注与水声通信和信道建模相关的代码示例,并按照研究方向分类学习;同时可参考其他领域的仿真案例以激发创新思路,注意代码的参数配置与可移植性,结合理论模型进行仿真调试与结果分析,实现理论与实践的深度融合。
打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 IT 行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰,但是,我们要清楚:淘汰的永远只是那些初级水平的从业者,过硬技术的从业者永远都是稀缺的。 因此对于学习,我们还是要踏踏实实的。 自学 Python ,也是一样,不要一开始因为头脑发热就不停地收藏各种资料网站,购买各种书籍,下载了大量的教学视频,过了几天,学习的热情开始褪去,再过几个星期,终于完成了学习课程 —— 《从入门到放弃》。 所以,学习 Python 需要一步一个脚印,踏踏实实地学。 本教程基于 Python 3.10+ 编写,部分章节标注了 3.11/3.12/3.13 的新特性。 两个在线站点任选: - 互动版(推荐零基础):https://learn-py.org —— 浏览器里直接写代码、自动判分、做对一题解锁下一题,跟着练就能上手 - 文档版(推荐系统通读 / 速查):https://walter201230..io/Python/ —— 纯阅读形态,章节齐全可整本翻,手机也好看 2026 更新说明 2026 年是 AI 编程的普及年,在这一年,我深切感受到 AI 编程的强大,以前我们手敲代码的年代估计一去不复返,现在手敲代码还被互联网称为古法编程,短短几年,变化如此的快,我是完全没想到的。 AI 时代,我以为这个课程不会再有人看了,但没想到这个教程依然每天保持着稳定的增长,于是我用 AI 把我这个项目全面更新了一下。 更新完了全部教程内容之后,我用 AI 做了一个网站,更方便大家学习,不过为了省成本,我这个是静态网站,该有的功能都有,该有的体验也有,只是没法做到跨设备保存你学习的记录...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值