文件上传漏洞学习小结

news2024/7/4 6:35:11

目录

一、漏洞简介

二、上传的原理或本质

2.1 文件上传的本质

2.2 文件上传的过程及代码演示

三、文件上传常见触发点

四、文件上传常见检测方式

4.1 前端js检测

4.2 content-type (MIME)检测

4.3 黑名单检测

4.4 文件头检测

4.5 .htaccess文件解析漏洞

4.6 图片二次渲染上传

4.7 文件上传条件竞争漏洞

4.8 一些其他的方式

4.9 比较通用检测方法

五、文件上传防御方法

六、一些扩展


一、漏洞简介

        文件上传的问题主要是由于程序员对用户文件上传部分的控制不足或者处理缺陷,从而导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件了。这里是上传的问题包含但不限于木马、病毒、恶意脚本或者webshell等。文件上传的功能本身是没有问题的,有问题的是文件上传后,服务器怎么处理、解释文件。

二、上传的原理或本质

2.1 文件上传的本质

        文件上传归根结底来自客户端的请求POST或者PUT请求,消息主体就是一些上传信息。比如上传页面指定的enctype为multipart/form-data或者 multipart/form-data

<form action='' enctype='multipart/form-data' method='POST'>
<input type='file' name='file'>
</form>

multipart 格式的数据会将一个表单拆分为多个部分(part),每个部分对应一个输入域。在一般的表单输入域中,它所对应的部分中会放置文本型数据,但是如果上传文件的话,它所对应的部分可以是二进制,下面展现  multipart 的请求体:

ilename 字段是必要的,指定了上传时的那个文件的文件名。其他的可有可无

Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA

------WebKitFormBoundaryrGKCBY7qhFd3TrwA

Content-Disposition: form-data; name="text"

title

------WebKitFormBoundaryrGKCBY7qhFd3TrwA

Content-Disposition: form-data; name="file"; filename="test.png"

Content-Type: image/png

PNG ... content of chrome.png ...

------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

这里在每个字段之间使用 ———WebKitFormBoundaryxxx 隔开,boundary是一个字符串,用来切分数据。

这里就和 post 请求一样,可以自己增加参数,就形如下面这样,将参数名放到 name 里,参数值放到下面:

------WebKitFormBoundary1PkqXeou9aUAIMHr
Content-Disposition: form-data; name="filename"

1.php

2.2 文件上传的过程及代码演示

1、文件上传 的过程

  • 客户端

选择发送的文件--》服务器接收--》网站程序判断--》临时文件--》移动到指定的路径

  • 服务端

处理上传的文件--保存指定路径

2、部分代码

  • 服务器接收资源代码
<?php
    if($_FILES["file"]["error"] > 0){
        echo "Error:".$FILES["file"]["error"]."<br/>";
    }else {
        echo "Upload:".$_FILES["file"]["name"]."<br/>";
        echo "Type:".$_FILES["file"]["type"]."<br/>";
        echo "Size:".($_FILES["file"]["size"]/1024)."Kb<br/>";
        echo "Stored in:".$_FILES["file"]["tmp_name"];
           }
?>
  • 客户端文件上传的代码
<html>
    <head>test</head>
    <body>
        <form action="upload.php" method="POST" encrype="multipart/form-data">
        <label for="file">Filename:</lable>
        <input type="file" name="file" id="file"/>
        <br/>
        </form>
    </body>
</html>

文件上传时会返回一些代码 返回客户端 客户端根据这些值判断上传是否正常

  • 值:0; 没有错误发生,文件上传成功。 
  • 值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
  • 值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 
  • 值:3; 文件只有部分被上传。 
  • 值:4; 没有文件被上传。

三、文件上传常见触发点

存在文件上传功能的地方都有可能存在文件上传漏洞,比如相册头像上传,视频、照片分享。论坛发帖和邮箱等可以上传附件的地方也是上传漏阔的高危地带,另外像文件管理器这样的功能也有可能被攻击者所利用。

  • 相册、头像上传
  • 视频、照片共享
  • 附件上传
  • 文件管理器
  • 系统升级处
  • 系统备份还原处

四、文件上传常见检测方式

上传代码分析

从代码处可知,直接获取文件名,把上传的临时文件移动到hackable/uploads/ 目录下

<?php

if( isset( $_POST[ 'Upload' ] ) ) {
	// Where are we going to be writing to?
	$target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
	$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );

	// Can we move the file to the upload folder?
	if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
		// No
		$html .= '<pre>Your image was not uploaded.</pre>';
	}
	else {
		// Yes!
		$html .= "<pre>{$target_path} succesfully uploaded!</pre>";
	}
}

?>

 直接上传文件,网页会返回路径 访问url即可getshell

这里用phpinfo函数测试,访问上传的文件

4.1 前端js检测

1、原理

在文件上传时,用户选择文件时,或者提交时,有些网站会对前端文件名进行验证,一般检测后缀名,是否为上传的格式。如果上传的格式不对,则弹出提示文字。此时数据包并没有提交到服务器,只是在客户端通过js 文件进行校验,验证不通过则不会提交到服务器进行处理。

2、绕过js检测方法

  •  按 F12 使用网页审计元素,把校验的上传文件后缀名文件删除,即可上传。

直接删除代码中onsubmit事件中关于文件上传时验证上传文件的相关代码即可:

或者可以不加载所有js,还可以将html源码copy一份到本地,然后对相应代码进行修改,本地提交即可

  • 把恶意文件改成 js 允许上传的文件后缀,如 jpg、gif、png 等,再通过抓包工具抓取 post 的数据包,把后缀名改成可执行的脚本后缀如php 、asp、jsp、net 等。即可绕过上传。 删除 js 文件

抓包修改后缀名

3、检测代码分析

客户段 html 上传文件时会调用 checkFile 函数,首先获取文件后缀名。如果文件为空,则弹出“请选择要上传的文件”,如果文件不为空,获取上传的文件后缀名不 .jpg、.png 、.gif 其中一种则提示“改文件不允许上传”,上传失败。

function checkFile(){
    var file = document.GetElementsByName('upload_file')[0].value;
    if (file == null || file == "") {
        alert("请选择要上传的文件!");
        return false;
    }
    //定义允许上传的文件类型
    var allow_ext = ".jpg|.png|.gif";
    //提取上传文件的类型
    var ext_name = file.substring(file.lastIndexOf("."));
    //判断上传文件类型是否允许上传
    if (allow_ext.indexOf(ext_name + "|") == -1) {
        var errMg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
    alert(errMsg);
    return false;
    }
}

4.2 content-type (MIME)检测

1、原理

有些上传模块,会对 http 的类型头进行检测,如果是图片类型,允许上传文件到服务器,否则返回上传失败。因为服务端是通过content-type 判断类型,content-type 在客户端可被修改。则此文件上传也有可能被绕过的风险。

2、绕过检测方法

  • burp抓包修改请求请求包中的content-type类型为支持的的类型

text/plain (纯文本)

text/html (HTML文档)

text/javascript (js代码)

application/xhtml+xml (XHTML文档)

image/gif (GIF图像)

image/jpeg (JPEG图像)

image/png (PNG图像)

video/mpeg (MPEG动画)

application/octet-stream (二进制数据)

application/pdf (PDF文档)

HTTP content-type | 菜鸟教程

3、检测代码分析

<?php

if( isset( $_POST[ 'Upload' ] ) ) {
	// Where are we going to be writing to?
	$target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
	$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );

	// File information
	$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
	$uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
	$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];

	// Is it an image?
	if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&
		( $uploaded_size < 100000 ) ) {

		// Can we move the file to the upload folder?
		if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
			// No
			$html .= '<pre>Your image was not uploaded.</pre>';
		}
		else {
			// Yes!
			$html .= "<pre>{$target_path} succesfully uploaded!</pre>";
		}
	}
	else {
		// Invalid file
		$html .= '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
	}
}

?>

在上述代码中,会检测文件类型是否是“image/jpeg" 或者 ”image/png",同时文件大小小于100000,即允许上传。

故绕过只要抓包修改content-type即可

4.3 黑名单检测

1、原理

上传模块,有时候会写成黑名单限制,在上传文件的时获取后缀名,再把后缀名与程序中黑名单进行检测,如果后缀名在黑名单的列表内,文件将禁止文件上传。

2、绕过方式

  • 上传黑名单的外的文件后缀即可(主要在于黑名单是否够全)

在 iis 里 asp 禁止上传了,可以上传 asa cer cdx 这些后缀,如在网站里允许.net 执行 可以上传 ashx 代替 aspx。如果网站可以执行这些脚本,通过上传后门即可获取 webshell。

在不同的中间件中有特殊的情况,如果在 apache 可以开启application/x-httpd-php在 AddType application/x-httpd-php .php .phtml .php3 后缀名为 phtml 、php3 均被解析成 php 有的 apache 版本默认就会开启。

上传目标中间件可支持的环境的语言脚本即可,如.phtml、php3。

3、检测代码分析

首先是检测 submit 是否有值,获取文件的后缀名,进行黑名单对比,后缀名不在黑名单内,允许上传。

$if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = arry('.asp','.aspx','.php','.jsp'); #黑名单列表
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name); //删除文件末尾的点
        $file_ext = strrchr($file_name,'.'); //文件名中最后出现. 的位置
        $fiel_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext); //去除字符串的::$DATA
        $file_ext = trim($file_ext); //首尾去除空字符

        if (!in_array($file_ext, $deny_ext)){ //检测处理后文件名是否在白名单
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.data("YmdHis").rand(1000,9999).$file_ext;
            if(move_uploaded_file($temp_file,$img_path)){
                $is_upload == true;
            }else {
                $msg = "上传出错";
            }
        }else {
                $msg = "不允许上传.asp,.aspx,.php,.jsp后缀文件";
        }
    }else{
        $msg = UPLOAD_PATH. "文件夹不存在,请手工创建";
....
            

PS:上述代码中存在对文件小写的转化,以及去除首尾空字符和对文件末尾”."删除以及::DATA字符的检测,如果没有这些,那么就可以有新的绕过方式,比如大写绕过,以及空格绕过、windows系统特性绕过、NTFS交换数据流::$DATA绕过。

1、windows系统特性

在 windows 中文件后缀名. 系统会自动忽略.所以 shell.php. 像shell.php 的效果一样。所以可以在文件名后面机上.绕过。

2、

 

4.4 文件头检测

1、原理

有的文件上传,上传时候会检测头文件,不同的文件,头文件也不尽相同。常见的文件上传图片头检测 它检测图片是两个字节的长度,如果不是图片的格式,会禁止上传。 常见的文件头

  • JPEG (jpg),文件头:FFD8FF
  • PNG (png),文件头:89504E47
  • GIF (gif),文件头:47494638
  • TIFF (tif),文件头:49492A00
  • Windows Bitmap (bmp),文件头:424D

128个常见的文件头信息对照表_常见文件头_致守的博客-CSDN博客

2、文件头绕过(如果是图片码要配合文件包含)

  • 制作图片一句话,使用 copy 1.gif/b+moon.php shell.php 将php 文件附加再jpg图片上,直接上传即可
copy a.png /b + a.php /a 3.php  
/b:指定以二进制格式复制、合并文件,用于图像或者声音类文件
/a:指定以ascii格式复制、合并文件用于txt等文本类文件

 注:这条命令的意思是:通过copy命令,把a.png图片文件,以二进制文件形式添加到a.php文件中,以ASCII文本文件形式输出为3.php文件。

3、文件头检测代码分析

这个是存在文件头检测的上传,getReailFileType 是检测jpg、png、gif 的文件头

如果上传的文件符合数字即可通过检测。

4.5 .htaccess文件解析漏洞

1、原理

.htaccess文件(或者"分布式配置文件") ,全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法,即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。

PS: web具体应用没有禁止.htaccess文件的上传,同时web服务器提供商允许用户上传自定义的.htaccess文件

2、利用方式

上传覆盖.htaccess文件,重写解析规则,将上传的带有脚本马的图片以脚本方式解析。

ps:
<FilesMatch "evil.gif">
SetHandler application/x-httpd-php   #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
AddHandler php5-script .gif          #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
</FilesMatch>

3、代码检测分析

在 htaccess 里写入 SetHandler application/x-httpd-php 则可以文件重写成php文件。要 htaccess 的规则生效 则需要在 apache 开启 rewrite 重写模块,因为apache 是多数都开启这个模块,所以规则一般都生效。

4.6 图片二次渲染上传

1、原理

有些图片上传,会对上传的图片进行二次渲染后在保存,体积可能会更小,图片会模糊一些,但是符合网站的需求。例如新闻图片封面等可能需要二次渲染,因为原图片占用的体积更大。访问的人数太多时候会占用,很大带宽。二次渲染后的图片内容会减少,如果里面包含后门代码,可能会被省略。导致上传的图片马,恶意代码被清除。

2、利用方式

  • 配合文件包含漏洞: 将一句话木马插入到网站二次处理后的图片中,也就是把一句话插入图片在二次渲染后会保留的那部分数据里,确保不会在二次处理时删除掉。这样二次渲染后的图片中就存在了一句话,在配合文件包含漏洞获取webshell。
  • 可以配合条件竞争: 这里二次渲染的逻辑存在漏洞,先将文件上传,之后再判断,符合就保存,不符合删除,可利用条件竞争来进行爆破上传

ps:技巧,查看图片是否被二次处理?

对比要上传图片与上传后的图片大小,使用16进制编辑器打开图片查看上传后保留了哪些数据,查看那些数据被改变。

3、代码分析

只允许上传 JPG PNG gif 在源码中使用 imagecreatefromgif 函数对图片进行二次生成。生成的图片保存在,upload 目录下。

4.7 文件上传条件竞争漏洞

1、原理

 条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不合理时,将会导致此类问题的发生。

比如:

在文件上传时,如果逻辑不对,会造成很大危害,例如文件上传时,用move_uploaded_file 把上传的临时文件移动到指定目录,接着再用rename 文件设置为图片格式,如果在 rename 之前 move_uploaded_file 这个步骤如果这个文件可被客户端访问,这里可能存在3种情况:

  • 访问时间点在上传成功之前,没有此文件
  • 访问时间点在刚上传成功但没有进行判断,该文件存在
  • 访问时间点在判断之后,文件被删除,没有此文件

2、利用绕过

上传 php 后门脚本,上传之后用 burpsutie 设置访问,线程建议体提高一些。抓包上传 php 文件 设置变量不停的提交这包

需要知道 php 的访问路径,抓包 不停的提交访问。 首先提交访问上传后的 php 路径 第二提交上传的文件的数据包即可。 

可以看到页面返回 200 证明上传成功.

ps:先批量提交访问php的包,然后提交上传的(都批量跑)

3、检测代码分析

采用白名单上传,$upload_file = UPLOAD_PATH . '/' . $file_name; 设置上传路径,后缀名没有限定为图片类型,接着 move_uploaded_file($temp_file, $upload_file) 将图片移动指定的目录,接着使用 rename 重名为图片类型。在重名之前如果被浏览器访问,可以得到一个 webshell。

4.8 一些其他的方式

  • 数组绕过上传
  • 文件名可控绕过
  • 目录可控绕过
  • 文件上传双写绕过
  • 利用windows环境的叠加特性绕过上传
  • 中间件解析漏洞(apache、iis6.0、iis7.0、iis7.5、nginx)

4.9 比较通用检测方法

判断是否为黑白名单,如果是白名单 寻找可控参数。如果是黑名单禁止上传,可以用有危害的后缀名批量提交测试,寻找遗留的执行脚本。

.php
.php5
.php4
.php3
.php2
.html
.htm
.phtml
.pht
.pHp
.phP
.pHp5
.pHp4
.pHp3
.pHp2
.Html
.Htm
.pHtml
.jsp
.jspa
.jspx
.jsw
.jsv
.jspf
.jtml
.jSp
.jSpx
.jSpa
.jSw
.jSv
.jSpf
.jHtml
.asp
.aspx
.asa
.asax
.ascx
.ashx
.asmx
.cer
.aSp
.aSpx
.aSa
.aSax
.aScx
.aShx
.aSmx
.cEr
.sWf
.swf
.htaccess

五、文件上传防御方法

服务器端使用白名单防御,修复 web 中间件的漏洞,禁止客户端存在可控参数,存放文件目录禁止脚本执行,限制后缀名 一定要设置图片格式jpg、gif 、png 文件名随机的,不可预测。

六、一些扩展

1、文件名可控,导致rce漏洞

在部分上传的功能处,文件的后缀没法绕过,但是往往很多对文件名没有做限制,同时服务器在处理文件时,会直接将文件名拼接进系统命令函数中,比如移动文件的操作。

那么此时就可以通过构造文件名造成rce漏洞

2、上传文件名为压缩包,里面文件可控,导致rce

有部分功能处,比如升级,配置文件处,喜欢通过上传压缩包,比如tar、zip等类似的文件,但是服务器却忽略对压缩包里面文件的检测,导致存在安全问题。

假如服务器端直接解压缩文件,然后直接操作里面的文件,比如移动文件的操作,势必会拼接文件名,那么这里就可操作,导致rce。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件评测师之数的表示

目录 一、数的进制(1)十进制&#xff1a;D(2)二进制&#xff1a;B(3)十六进制&#xff1a;H(4)八进制&#xff1a;O/Q 二、其他进制转十进制(1)二进制转十进制(2)十六进制转十进制(3)八进制转十进制 三、二进制与十六进制/八进制进行转换四、考法 一、数的进制 (1)十进制&…

微波系统中散射参量S、阻抗参量Z及导纳参量Y之间的关系及MATLAB验证

微波系统中散射参量S、阻抗参量Z及导纳参量Y之间的关系及MATLAB验证 用HFSS设计了一微波元件&#xff0c;仿真出了其散射参量S、阻抗参量Z及导纳参量Y&#xff0c;用MATLAB验证他们之间的关系 HFSS设计螺旋线圈 用HFSS设计了一个螺旋线圈&#xff0c;如上图所示。 进行仿真&…

无涯教程-JavaScript - DAYS360函数

描述 DAYS360函数返回基于360天的年份(十二个月为30天)的两个日期之间的天数,该天数用于会计计算。 语法 DAYS360 (start_date,end_date,[method])争论 Argument描述Required/OptionalStart_dateThe two dates between which you want to know the number of days.Required…

ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案

ElasticSearch第三讲&#xff1a;ES详解 - Elastic Stack生态和场景方案 本文是ElasticSearch第三讲&#xff0c;在了解ElaticSearch之后&#xff0c;我们还要了解Elastic背后的生态 即我们常说的ELK&#xff1b;与此同时&#xff0c;还会给你展示ElasticSearch的案例场景&…

Django框架中使用drf框架开发

一、drf框架特点&#xff1a; 全称 Django REST framework 两大部分&#xff1a;序列化/反序列化 和 增删改查序列化&#xff1a;把数据库数据提取出来变成python常用格式的过程反序列化&#xff1a;把数据写入到数据库的过程增加 &#xff1a; 校验请求数据 -> 执行反…

OpenWrt编译自己的应用程序

编译OpenWrt的应用程序可以参考OpenWrt内部其他应用程序的例程&#xff0c;来编写成自己的应用程序 一、OpenWrt源代码获取与编译 1.1、搭建环境 下载OpenWrt的官方源码&#xff1a; git clone https://github.com/openwrt/openwrt.git1.2、安装编译依赖项 sudo apt update…

2023年Tik Tok在印尼的市场分析,怎么开通海外娱乐公会?

2023年 印尼的TIKTOK用户 字节跳动广告资源发布的数据显示&#xff0c;到2023年初&#xff0c;TikTok在印度尼西亚有1.099亿18岁及以上的用户。 字节跳动的数据显示&#xff0c;2023年初&#xff0c;抖音广告在印尼18岁及以上的成年人中占56.8%。 与此同时&#xff0c;今年年…

2022年09月 C/C++(八级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 第1题&#xff1a;道路 N个以 1 … N 标号的城市通过单向的道路相连:。每条道路包含两个参数&#xff1a;道路的长度和需要为该路付的通行费&#xff08;以金币的数目来表示&#xff09; Bob and Alice 过去住在城市 1.…

msvcr120.dll找不到是什么原因

今天&#xff0c;我将为大家分享关于电脑msvcr120.dll丢失的6种不同解决方法。希望这些方法能够帮助到正在面临这个问题的朋友们。 首先&#xff0c;让我们来了解一下msvcr120.dll是什么文件。msvcr120.dll是Microsoft Visual C 2012 Redistributable Package的一个组件&#x…

CMA和CNAS的区别?

测试资质 一、定义不同CMA&#xff1a;即实验室资质认定&#xff0c;也称为计量认证。它是根据《中华人民共和国计量法》、《中华人民共和国认证认可条例》等有关法律法规&#xff0c;对向社会提供公证数据的检验机构进行强制性检查的一种方式&#xff0c;是政府对第三方实验室…

浏览器中怎样查看前后端传值

路径&#xff1a;F12–>Network -->Fetch/XHR,选择一个接口地址。 在payload里面是前端发送给后端的参数。也即客户端发送给服务端的请求数据&#xff0c;即接口地址入参。 Preview和Response里都是后端返回给前端的。Preview是格式化过的&#xff0c;比较容易看。Resp…

Seata 解决分布式事务理论与实践

文章目录 1.分布式事务问题1.1.本地事务1.2.分布式事务1.3.演示分布式事务问题 2.理论基础2.1.CAP定理2.2.BASE理论2.3.解决分布式事务的思路 3.初识Seata3.1.Seata的架构3.2.部署TC服务3.3.微服务集成Seata3.3.1.引入依赖3.3.2.配置TC地址3.3.3.其它服务 4.动手实践4.1.XA模式…

合并两个有序链表(每日一题)

“路虽远&#xff0c;行则将至” ❤️主页&#xff1a;小赛毛 ☕今日份刷题&#xff1a;合并两个有序链表 题目描述&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例1&#xff1a; 输入&#xff1a;l1 …

GeoServe Web 管理界面 实现远程访问

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现&#xff0c;利用GeoServer可以方便地发布地图数据&#xff0c;允许用户对要素数据进行更新、删除、插入…

系统错误码指示确立+日志模块手动配置

1&#xff0c;系统错误码指示确立 对于前后端分离的系统设计中&#xff0c;后端建立错误码指示对于前端非常重要可以指示错误存在地方&#xff1b;以用户注册为例&#xff1b; public interface SystemCode{int SYSTEM_USER_ERROR_ADD_FAIL 10000;int SYSTEM_USER_INFO_ADD …

C#,《小白学程序》第十四课:随机数(Random)第一,几种随机数的计算方法与代码

1 文本格式 /// <summary> /// 《小白学程序》第十四课&#xff1a;随机数&#xff08;Random&#xff09;第一&#xff0c;几种随机数的计算方法与代码 /// 本课初步接触一下随机数。 /// </summary> /// <param name"sender"></param> ///…

《TCP/IP网络编程》阅读笔记--地址族和数据序列

目录 1--IP地址和端口号 2--地址信息的表示 3--网络字节序与地址变换 4--网络地址的初始化与分配 5--Windows部分代码案例 1--IP地址和端口号 IP 地址分为两类&#xff1a; ① IPv4 表示 4 字节地址族&#xff1b; ② IPv6 表示 16 字节地址族&#xff1b; IPv4 标准的 4 …

Svelte状态管理——svelte/store模块的使用

目录 前言 一、项目中使用示例 1. 创建全局状态 2. 在组件中使用全局状态 3. 便捷使用技巧$ 二、api介绍 1. writable 2. readable 3. derived 前言 在 Svelte 中&#xff0c;可以使用其自带的svelte/store模块来管理全局的应用程序状态&#xff0c;该模块导出用于创…

大出所料,9月1号前上线的小游戏却收到了补充备案材料的通知

引言 前阵子工信部发布了《工业和信息化部关于开展移动互联网应用程序备案工作的通知》&#xff0c;为此&#xff0c;微信公众平台ICP代备案管理系统提供新增备案、变更备案、注销备案等服务&#xff0c;协助开发者更好更方便地完成微信小程序备案&#xff0c;届时所有9月1号后…

HTML 标签讲解

HTML 标签讲解 HTML 语言结构根元素元数据元素主体根元素大纲元素文本内容语义化内联文本图像与多媒体编辑标识table表格内容表单内容table表单 HTML 语言结构 Markup &#xff08;标记、标签&#xff09;用来容纳和描述内容 严格意义上&#xff0c;标签是指开始标签&#xf…