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

文件上传漏洞:upload-labs靶场1-10

目录

文件上传漏洞介绍

定义

产生原因

常见危害

漏洞利用方式

upload-labs详解

pass-01

pass-02

pass-03

pass-04

pass-05

pass-06

pass-07

pass-08

pass-09

pass-10


文件上传漏洞介绍

定义

文件上传漏洞是指网络应用程序在处理用户上传文件时,没有对上传的文件进行充分的验证和过滤,导致攻击者可以利用这个漏洞上传恶意文件到服务器,从而获取服务器的控制权或执行其他恶意操作。

产生原因

  • 缺乏文件类型验证:应用程序没有对上传文件的类型进行严格检查,仅通过客户端的 JavaScript 进行验证,而这种验证很容易被绕过,攻击者可将恶意文件的后缀名修改为允许上传的文件类型,如将.php文件改为.jpg
  • 文件路径处理不当:应用程序在保存上传文件时,没有对文件路径进行正确的处理,导致攻击者可以通过构造特殊的文件名或路径,将文件上传到服务器的敏感目录,如 Web 根目录。
  • 文件大小限制不足:没有对上传文件的大小进行合理限制,攻击者可能上传超大文件,耗尽服务器的磁盘空间或导致服务器拒绝服务。
  • 执行权限配置错误:服务器对上传文件的存储目录或文件本身的权限设置不当,使得攻击者上传的文件具有可执行权限,从而能够在服务器上运行。

常见危害

  • 网站篡改:攻击者上传恶意脚本文件,如 PHP、ASP 等脚本,一旦这些脚本被执行,攻击者就可以修改网站的内容,替换网页页面,发布违法信息等,严重影响网站的正常运行和形象。
  • 数据泄露:攻击者上传恶意文件后,可能获取服务器上的敏感信息,如用户数据、数据库配置文件等,导致用户信息泄露,给用户和网站运营者带来严重损失。
  • 服务器控制:通过上传可执行的恶意文件,攻击者可以进一步获取服务器的控制权,在服务器上执行任意命令,如创建新的用户账号、安装后门程序、控制服务器发起 DDoS 攻击等,使服务器完全处于攻击者的掌控之下。

漏洞利用方式

  • 直接上传恶意脚本:攻击者找到网站的文件上传点,直接上传包含恶意代码的脚本文件,如 PHP webshell,然后通过访问该文件来执行恶意代码,获取服务器权限。
  • 配合其他漏洞利用:文件上传漏洞往往与其他漏洞结合使用,如与 SQL 注入漏洞结合,攻击者通过 SQL 注入获取上传文件的路径和文件名,然后访问上传的恶意文件,实现进一步的攻击。

upload-labs详解

pass-01

方法一

我们可以查看一下源代码,发现这里只允许上传 .jpg|.png|.gif类型的文件。(并且前端只能上传文件的类型为.jpg|.png|.gif,所以我们利用抓包工具来修改文件类型为php)

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 errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;alert(errMsg);return false;}

于是,创建一个文php文件

将该文件的后缀名修改为jpg

然后利用burpsuite抓包来修改文件的类型,

将web.png修改为web.php

改为

结果: 

查看文件上传结果

成功。

方法二

我们开始尝试上传php文件,触发前端界面弹窗警告

接着尝试利用bp来进行抓包,发现无法抓包,应该是只在前端做了验证,于是我们禁用javascript,再次尝试。

上传文件

 上传成功

访问文件

漏洞点:只对前端进行了文件的过滤,后端没有过滤操作。

pass-02

首先,我们先简单上传一个php文件,做一个测试,

上传未成功,我们查看源代码

if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name'];          if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = '文件类型不正确,请重新上传!';}} else {$msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';}
}

发现文件上传之后会对文件的类型进行检测,发现其存在Content-Type绕过

那么我们可以利用bp来抓包修改文件的类型

改为

结果上传成功

当然也可以利用第一关的方法,在上传之前将php文件修改为jpg文件,利用bp抓包,将jpg文件再修改为php文件,也是可以的。

本关考察的点是,检查文件的MIME类型是否为以下三种,image/jpeg,image/gif,image/png。

pass-03

 首先,简单上传php文件,发现文件的类型不允许上传,故查看源代码,发现限制了文件的后缀名,但是没有限制php1,php2之类的后缀名

if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array('.asp','.aspx','.php','.jsp');$file_name = trim($_FILES['upload_file']['name']);$file_name = deldot($file_name);//删除文件名末尾的点$file_ext = strrchr($file_name, '.');$file_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.'/'.date("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 . '文件夹不存在,请手工创建!';}

于是,我们将文件的类型改为

上传成功

访问文件

漏洞点:简单的黑名单绕过。 

pass-04

该关类型同第三关,但是增加了后缀名的限制,但是没有限制.htaccess类型的文件 

if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".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");$file_name = trim($_FILES['upload_file']['name']);$file_name = deldot($file_name);//删除文件名末尾的点$file_ext = strrchr($file_name, '.');$file_ext = strtolower($file_ext); //转换为小写$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA$file_ext = trim($file_ext); //收尾去空

 编写.htaccess文件内容为

AddType application/x-httpd-php .jpg
  • AddType 是 Apache 的配置指令,其作用是为指定的文件扩展名关联特定的 MIME 类型。
  • application/x-httpd-php 是 Apache 服务器用来识别 PHP 脚本的 MIME 类型。当服务器遇到具有该 MIME 类型的文件时,会将其作为 PHP 脚本进行解析和执行。
  • .jpg 是常见的图像文件扩展名。这行代码意味着将原本应该作为图像文件处理的 .jpg 文件,关联到了 PHP 脚本的 MIME 类型上。

然后上传web.jpg文件内容为<?php phpinfo(); ?>

 访问图片

漏洞点:

没有过滤.htaccess,利用该特点将当前目录下有以.jpg结尾的文件,就会被解析为.php

pass-05

本关漏洞点:忽略大小写

直接上传文件web.phP,即可 

if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".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");$file_name = trim($_FILES['upload_file']['name']);$file_name = deldot($file_name);//删除文件名末尾的点$file_ext = strrchr($file_name, '.');$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA$file_ext = trim($file_ext); //首尾去空

 访问文件:

pass-06

本关漏洞点:忽略文件后缀名的空格

if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".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");$file_name = $_FILES['upload_file']['name'];$file_name = deldot($file_name);//删除文件名末尾的点$file_ext = strrchr($file_name, '.');$file_ext = strtolower($file_ext); //转换为小写$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA

由于windows中文件的后缀名中空格被自动过滤,故利用bp,

通过抓包修改文件名,再文件的后缀名加入空格即可

查看文件是否上传

访问文件

成功

pass-07

本关漏洞点:小数点绕过

if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".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");$file_name = trim($_FILES['upload_file']['name']);$file_ext = strrchr($file_name, '.');$file_ext = strtolower($file_ext); //转换为小写$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA$file_ext = trim($file_ext); //首尾去空

利用bp抓包修改文件名,加入小数点

 访问文件

pass-08

本关漏洞点:::$DATA绕过

::$DATA(只适用于Windows系统)在Windows的时候如果文件名"+::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名绕过,比如上传的文件名为info.php::$DATA会在服务器上重新生成一个test.php的文件,其中内容和所上传文件内容相同,并被解析。

if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".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");$file_name = trim($_FILES['upload_file']['name']);$file_ext = strrchr($file_name, '.');$file_ext = strtolower($file_ext); //转换为小写$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA$file_ext = trim($file_ext); //首尾去空

利用bp抓包修改上传的文件为web.php::$DATA

 

访问文件:

pass-09

本关漏洞点:windows操作环境特点

if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".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");$file_name = trim($_FILES['upload_file']['name']);$file_name = deldot($file_name);//删除文件名末尾的点$file_ext = strrchr($file_name, '.');$file_ext = strtolower($file_ext); //转换为小写$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA$file_ext = trim($file_ext); //首尾去空

利用bp抓包修改文件名为web.php. .即(web.php+点+空格+点)

访问文件:

pass-10

本关漏洞点:双写绕过

if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");$file_name = trim($_FILES['upload_file']['name']);$file_name = str_ireplace($deny_ext,"", $file_name);$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.$file_name;        if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}

先使用trim函数去除其两边的空白字符以及转义字符,再使用str_ireplace,将$file_name的字符串与$deny_ext中的黑名单对比,如果有相同的,则从$file_name中删除对应部分,通常这种情况的过滤,可以使用双写对应的字符,使其删除一次后恢复为正确的文件后缀进行绕过。例如pphphp经过绕过之后修改为php

利用bp修改文件名为web.phpphp

访问文件

 未完待续。。。

相关文章:

文件上传漏洞:upload-labs靶场1-10

目录 文件上传漏洞介绍 定义 产生原因 常见危害 漏洞利用方式 upload-labs详解 pass-01 pass-02 pass-03 pass-04 pass-05 pass-06 pass-07 pass-08 pass-09 pass-10 文件上传漏洞介绍 定义 文件上传漏洞是指网络应用程序在处理用户上传文件时&#xff0c;没有…...

【Python/Pytorch】-- 创建3090Ti显卡所需环境

文章目录 文章目录 01 服务器上&#xff0c;存在三个anaconda&#xff0c;如何选择合适的&#xff0c;创建python环境&#xff1f;02 conda、anaconda、cuda、cudnn区别03 用到一些指令04 如何指定cuda的版本&#xff1f;05 conda跟pip的区别&#xff1f;06 pycharm控制台07 服…...

自然语言转SQL之Vanna.ai:AI集成数据库

自然语言转SQL之Vanna.ai&#xff1a;AI集成数据库 一、Vanna.ai是什么二、落地步骤&#xff1a;实现三层需求2.1 官方示例看效果2.2 对接自己的数据库2.3 完全本地化之路 三、构建自己的产品3.1 提问转SQL3.2 执行SQL查询实例2 要实现的功能就是&#xff1a;用中文语言同数据库…...

【零基础到精通Java合集】第二十二集:CMS收集器详解(低延迟的里程碑)

课程标题:CMS收集器详解——低延迟垃圾回收的经典实现(15分钟) 目标:掌握CMS核心工作原理、适用场景与调优策略,理解其在高并发场景下的价值与局限性 0-1分钟:课程引入与CMS设计目标 以“高速公路不停车收费”类比CMS核心思想:在用户线程运行的同时并发回收垃圾,最大…...

2025-03-04 学习记录--C/C++-PTA 习题5-5 使用函数统计指定数字的个数

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 二、代码&#xff08;C语言&#xff09;⭐️ #include <stdio.h>int CountDigit( int number, int di…...

SP导入模型设置

法线贴图格式 Blender,Unity选择OpenGL UE,3DMax选择DirectX...

计算机网络——IP地址

一、IP地址是什么&#xff1f; 定义 IP地址是互联网协议&#xff08;Internet Protocol&#xff09;为每台联网设备分配的唯一标识符&#xff0c;由一串数字&#xff08;IPv4&#xff09;或字母与数字组合&#xff08;IPv6&#xff09;构成。 核心作用&#xff1a;定位设备位置…...

openharmony 软总线-设备发现流程

6.1 设备发现流程 6.1.1 Wi-Fi设备发现 6.1.1.1 Wi-Fi设备发现流程 Wi-Fi设备在出厂状态或者恢复出厂状态下&#xff0c;设备上电默认开启SoftAP模式&#xff0c;SoftAP的工作信道在1&#xff0c;6&#xff0c;11中随机选择&#xff0c;SoftAP的Beacon消息中携带的SSID eleme…...

零信任架构和传统网络安全模式的

零信任到底是一个什么类型的模型&#xff1f;什么类型的思想或思路&#xff0c;它是如何实现的&#xff0c;我们要做零信任&#xff0c;需要考虑哪些问题&#xff1f; 零信任最早是约翰金德瓦格提出的安全模型。早期这个模型也是因为在安全研究上考虑的一个新的信任式模型。他最…...

TCP/IP四层模型:从入门到精通

第一部分&#xff1a;基础概念 1.1 什么是TCP/IP&#xff1f; - TCP/IP 是互联网的基础通信协议簇&#xff0c;定义了数据如何在网络中传输和路由。 - 与OSI七层模型的对比&#xff1a;TCP/IP更简化&#xff0c;分为四层&#xff0c;注重实际应用。 1.2 四层模型结构 1. 应…...

二、QT和驱动模块实现智能家居-----问题汇总1

1、文件地址改变后必须在QT下更改地址 2、指定了QT内Kits下的Sysroot头文件地址&#xff0c;但是还是找不到头文件&#xff1a; 3、提示无法执行QT程序&#xff1a;先干掉之前的QT程序 ps //查看程序PIDkill -9 PID 4、无法执行QT程序 1&#xff09;未设置环境变量 …...

10、HTTP/3有了解过吗?【中高频】

HTTP/2 虽然具有多个流并发传输的能力&#xff0c;但是传输层是 TCP 协议&#xff0c;依然存在缺陷&#xff1a; 队头阻塞&#xff0c;HTTP/2 是基于 TCP 协议来传输数据的&#xff0c;TCP 是字节流协议&#xff0c;TCP 层必须保证收到的字节数据是完整、连续的&#xff0c;当「…...

基于https虚拟主机配置

一、https介绍 http 明文&#xff0c;80/tcp https 密文&#xff0c;443/tcp 二、安全性保障 1、数据安全性 数据加密 2、数据完整性 3、验证身份的真实性、有效性 三、数据安全性 手段&#xff1a;加密 发送方加密数据&#xff0c;接收方解密数据 对称加密算法 加密、解密数据…...

小白入坑向:Java 全栈系统性学习推荐路线之一

文章目录 一、 引言1.1 学习路径&#xff1a;1.2 技术栈全景概述1.3 前沿技术与趋势预判 二、 前端篇2.1 基础知识2.2 进阶技术2.3 前端框架与工具 三、 后端篇3.1 Java 基础3.2 进阶与新特性 四、 企业级框架与开发工具4.1 构建与项目管理4.2 核心框架4.3 数据持久层4.4 微服务…...

云原生存储架构:构建数据永续的新一代存储基础设施

引言&#xff1a;重新定义数据基础设施边界 蚂蚁集团基于Ceph构建的全闪存存储集群达到EB级规模&#xff0c;单集群IOPS突破1亿&#xff0c;延迟稳定在200μs内。Snowflake的存储计算分离架构使其数据湖查询速度提升14倍&#xff0c;存储成本降低82%。Gartner预测到2025年70%企…...

QTableWidget之表格列的隐藏与显示(折叠)

今天晚上花点时间研究一下表格列的显隐问题&#xff08;类似与excel的隐藏列功能&#xff09;&#xff0c;在网络上搜罗了一通资料&#xff0c;没现成的例子作为借鉴&#xff0c;只能自己研究编写了。现在将过程记录下来&#xff0c;以便日后翻阅。 首先声明&#xff1a;因为时…...

Leetcode3146. 两个字符串的排列差

题目描述&#xff1a; 给你两个字符串 s 和 t&#xff0c;每个字符串中的字符都不重复&#xff0c;且 t 是 s 的一个排列。 排列差 定义为 s 和 t 中每个字符在两个字符串中位置的绝对差值之和。 返回 s 和 t 之间的 排列差 。 代码思路&#xff1a; 建立字符位置映射&…...

二百八十五、华为云PostgreSQL——建分区表并设置主键

一、目的 在PostgreSQL里建表&#xff0c;设置主键&#xff0c;三个字段确认数据的唯一性。设置分区字段&#xff0c;按月分区 二、PostgreSQL版本 三、PostgreSQL 9.2.4 版本缺点 在 PostgreSQL 9.2.4 中&#xff0c;虽然你可以创建分区表&#xff0c;但需要注意的是&#…...

系统架构设计师-第3章 数据库设计

【本章学习建议】 根据考试大纲&#xff0c;本章主要考查系统架构设计师单选题&#xff0c;预计考5分左右&#xff0c;以及案例分析1题&#xff0c;25分。对应第二版教材2.3.3小节以及第6章&#xff0c;主要考点在第6章&#xff0c;这里一起合并到本章课程中。 3.1 数据库基本…...

SAP MDG —— MDG on S/4HANA 2023 FPS03 创新汇总

文章目录 MDG 基于SAP S/4HANA 2023 FPS03的创新BP/C/S&#xff1a;消息控制BP/C/S&#xff1a;手工分配数据控制者MDG-F&#xff1a;使用S/4扩展数据校验功能生成式AI可用于协助自定义对象的数据变更/同时可总结批量变更的内容 MDG 基于SAP S/4HANA 2023 FPS03的创新 由于从S…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...