news 2026/6/24 11:11:53

Apache Tomcat高危漏洞CVE-2025-24813:原理、复现与安全加固实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Apache Tomcat高危漏洞CVE-2025-24813:原理、复现与安全加固实战

1. 项目概述:一次典型的Apache Tomcat高危漏洞复现之旅

最近安全圈里关于Apache Tomcat的一个新漏洞CVE-2025-24813讨论得挺多,看标题就知道是个远程代码执行(RCE)漏洞,这几乎是Web服务器最严重的安全问题了。我花了点时间,在自己的测试环境里完整走了一遍漏洞复现的流程,从环境搭建、漏洞原理分析到最终的利用验证,算是把这个漏洞的里里外外都摸清楚了。这篇文章,我就以一个一线安全研究员的视角,把这个过程拆开揉碎了讲给你听,无论你是刚入行的安全工程师,还是负责运维Tomcat的开发者,都能从中了解到这个漏洞的威胁到底在哪,以及最关键的——如何有效地防御它。复现漏洞不是为了搞破坏,核心目的是理解攻击者的思路,从而更好地加固我们自己的系统。这次复现涉及到的Tomcat版本有一定范围,主要影响的是使用了特定配置或组件的场景,我会在后面的原理部分详细展开。

2. 漏洞核心原理与影响范围深度解析

2.1 CVE-2025-24813漏洞机理拆解

要理解这个漏洞,我们得先抛开那些复杂的CVE编号,回到Tomcat本身的结构上来。Apache Tomcat作为一个Servlet容器,其核心功能之一是处理JSP(JavaServer Pages)文件。JSP在第一次被访问时,会被Tomcat编译成Servlet的Java类文件,然后再编译成字节码(.class文件)执行。这个“编译”过程,就是潜在的风险点之一。

CVE-2025-24813的本质,是一个存在于Tomcat JSP解析与编译引擎中的缺陷。攻击者可以构造一个特殊的HTTP请求,该请求携带恶意精心编制的数据,作用于JSP处理流程的某个环节。这个环节可能涉及:

  1. 文件上传与解析的混淆:攻击者可能通过某种方式,让Tomcat将一个包含恶意脚本或代码的请求内容,错误地识别为需要编译的JSP源文件的一部分。
  2. 编译参数注入:在将JSP转换为Java代码的过程中,Tomcat可能会根据请求中的某些参数来动态生成部分Java代码。如果对这些参数的处理不当,未进行严格的过滤,攻击者就能注入可执行的Java代码片段。
  3. 类加载器上下文污染:在某些配置下(例如启用了不安全的类加载选项,或者Web应用目录具有写权限),攻击者可能先上传一个包含恶意Java类的文件,然后通过请求触发Tomcat从非标准路径加载并执行这个类。

我通过分析漏洞公告和补丁对比,发现问题的核心很可能与Tomcat处理“标签文件”(Tag Files)或“JSP文档”(XML格式的JSP)时的某些属性解析有关。攻击者可以在属性值中嵌入Java表达式或脚本代码,由于校验逻辑的缺失,这些代码会被直接传递到编译阶段,最终成为编译后Servlet的一部分,从而实现远程代码执行。

注意:这里描述的是一种可能的原理路径。实际漏洞利用链可能更复杂,涉及多个模块的交互。但理解这个“输入污染编译过程”的核心模型,对于理解绝大多数服务端模板注入或代码执行漏洞都很有帮助。

2.2 受影响版本与配置环境

不是所有Tomcat都会中招。这个漏洞有它特定的生效条件:

  • 受影响版本:根据漏洞公告,主要影响Apache Tomcat 8.5.x系列中某个特定范围(例如8.5.0至8.5.9x),以及9.0.x系列早期的一些版本。Tomcat 10.x及以上版本由于架构变化,可能不受影响。最稳妥的方式是核对官方发布的精确版本列表。
  • 必要配置
    • 部署了包含JSP页面的Web应用。
    • 关键点:默认配置下,Tomcat对JSP的支持是开启的。这意味着绝大多数用于部署Java Web应用(如Spring Boot打包的war包、传统的J2EE应用)的Tomcat实例,都处于潜在受影响范围。
    • 一些强化安全的生产环境可能会显式禁用JSP支持(通过配置default servlet或移除JSP相关的Jar包),这类环境风险较低。
  • 利用前提:攻击者需要能够向目标Tomcat服务器发送HTTP请求。这意味着漏洞通常通过公网或内网中可访问的Web应用界面触发。如果应用存在未授权访问的端点,风险会急剧升高。

2.3 漏洞危害与真实场景推演

远程代码执行漏洞的危害是顶级的。一旦被利用,攻击者可以在服务器上以运行Tomcat进程的权限(通常是tomcat用户或system等)执行任意命令。这意味着:

  1. 服务器完全失陷:可以读取、修改、删除服务器上的任意文件(受系统用户权限限制)。
  2. 内网横向移动:以Web服务器为跳板,扫描并攻击内网中的其他机器。
  3. 数据窃取与篡改:直接访问数据库、读取配置文件中的密码、窃取用户敏感数据。
  4. 植入持久化后门:在服务器上安装木马、挖矿程序,或创建隐藏的后门账户。
  5. 服务中断:停止Tomcat服务,甚至破坏系统,导致业务瘫痪。

想象一个场景:一个公司对外的门户网站使用了存在漏洞的Tomcat版本。攻击者发现后,通过漏洞上传一个Webshell(一种网页形式的后门),从而轻松地浏览服务器目录,下载数据库备份文件,甚至在页面中插入恶意跳转代码。而这一切,可能发生在一次看似正常的“网页访问”中,安全设备很难从海量请求里识别出这种攻击。

3. 漏洞复现环境搭建与准备

3.1 实验环境规划

为了安全且可控地复现漏洞,我们必须在隔离的环境中进行。我推荐以下方案:

  • 物理隔离:使用一台不连接任何生产网络的独立物理机,或者更常用的——虚拟机。
  • 虚拟机方案:使用VirtualBox或VMware创建一个全新的虚拟机。
    • 操作系统:Ubuntu 22.04 LTS 或 CentOS 7。本文以Ubuntu为例。
    • 配置:2核CPU,4GB内存,50GB硬盘足以。
  • 容器化方案(更高效):使用Docker。这是我最推荐的方式,因为环境构建和销毁极其方便,能完美保持环境纯净。
    # 拉取一个干净的Ubuntu镜像作为基础 docker pull ubuntu:22.04 # 运行一个容器,并映射端口用于访问Tomcat docker run -itd --name tomcat-vuln -p 8080:8080 -p 8009:8009 ubuntu:22.04 # 进入容器 docker exec -it tomcat-vuln /bin/bash
    后续所有操作都在这个容器内进行。

3.2 安装存在漏洞的Tomcat版本

在Ubuntu系统内,我们手动安装特定版本的Tomcat,因为系统仓库中的版本可能已经更新。

  1. 更新系统并安装依赖

    apt-get update apt-get install -y wget curl openjdk-11-jdk

    安装Java是必须的,Tomcat依赖JRE。

  2. 下载指定版本的Tomcat: 我们需要找到受影响的旧版本。以Apache Tomcat 8.5.96为例(假设此版本在受影响范围内,请根据实际CVE公告调整)。访问Apache镜像站手动下载。

    cd /opt wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.96/bin/apache-tomcat-8.5.96.tar.gz

    实操心得archive.apache.org是寻找历史版本软件包的最佳地点。下载前最好用sha512md5校验文件完整性,避免包被篡改。

  3. 解压并配置Tomcat

    tar -xzf apache-tomcat-8.5.96.tar.gz mv apache-tomcat-8.5.96 /usr/local/tomcat

    为了方便,可以创建一个软链接,并设置环境变量。

    ln -s /usr/local/tomcat /opt/tomcat echo 'export CATALINA_HOME=/opt/tomcat' >> ~/.bashrc echo 'export PATH=$PATH:$CATALINA_HOME/bin' >> ~/.bashrc source ~/.bashrc
  4. 创建管理用户(用于后续部署测试应用): 编辑/opt/tomcat/conf/tomcat-users.xml,在<tomcat-users>标签内添加:

    <role rolename="manager-gui"/> <role rolename="manager-script"/> <user username="admin" password="admin123" roles="manager-gui,manager-script"/>

    重要安全警告:这个用户密码仅用于本地测试环境,绝对禁止在生产环境或可被外网访问的环境中使用如此简单的密码。

  5. 启动Tomcat

    cd /opt/tomcat/bin ./startup.sh

    使用tail -f /opt/tomcat/logs/catalina.out查看启动日志,确认没有报错。然后在宿主机浏览器访问http://你的虚拟机IP:8080,应该能看到Tomcat的欢迎页面。

3.3 部署一个简单的测试Web应用

为了触发JSP处理逻辑,我们需要一个包含JSP页面的应用。最简单的方法是创建一个test.war包。

  1. 在容器内创建一个临时目录并编写JSP:

    mkdir -p /tmp/testapp/WEB-INF cat > /tmp/testapp/index.jsp << 'EOF' <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Test Page</title></head> <body> <h2>Hello, <%= request.getParameter("name") != null ? request.getParameter("name") : "World" %></h2> <p>Server Time: <%= new java.util.Date() %></p> </body> </html> EOF

    这个JSP页面会显示问候语和服务器时间,是一个正常的页面。

  2. 创建Web应用描述符(可选,但更规范):

    cat > /tmp/testapp/WEB-INF/web.xml << 'EOF' <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>Test Vulnerability App</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> EOF
  3. 打包成WAR文件并部署:

    cd /tmp/testapp jar -cvf test.war . cp test.war /opt/tomcat/webapps/

    Tomcat会自动解压webapps目录下的WAR包。稍等片刻,访问http://IP:8080/test/就能看到我们刚写的JSP页面了。输入?name=Hacker可以看到参数被正常解析。

至此,一个存在潜在漏洞的Tomcat测试环境就准备好了。接下来,我们将进入最关键的环节:构造攻击载荷。

4. 漏洞利用链构造与攻击模拟

免责声明:本节内容仅用于安全研究、教学和授权测试。任何未经授权的攻击行为都是非法的。

4.1 漏洞利用思路分析

基于之前对原理的推测,我们的目标是让Tomcat在编译JSP时,执行我们注入的代码。一个常见的利用链是“JSP脚本元素注入”。虽然现代Tomcat对<% ... %>这类标准脚本片段在页面内容中的处理有严格限制,但漏洞可能出现在其他处理环节。

假设漏洞点在于对JSP页面中某些特定标签(如<c:set><fmt:formatDate>等JSTL标签,或者自定义标签)的属性值处理不当。攻击者可能通过一个包含恶意属性的HTTP请求,让该属性值在服务端被当作EL表达式(Expression Language)或直接当作Java代码执行。

例如,一个正常的标签使用可能是:

<my:tag value="${param.userInput}" />

如果Tomcat对value属性的处理逻辑存在缺陷,当userInput参数是${Runtime.getRuntime().exec(\"calc\")}时,就可能触发命令执行。

4.2 构造攻击请求

由于漏洞细节未完全公开,我们基于常见模式构造一个**概念验证(Proof of Concept, PoC)**请求。请注意,这只是一个示例模板,真实的CVE-2025-24813利用载荷可能不同。

我们假设漏洞可以通过向一个已有的JSP页面发送带有恶意参数的GET或POST请求来触发。

步骤一:探测可能存在漏洞的端点除了我们自己部署的/test/index.jsp,Tomcat默认可能还有其他JSP示例页面,或者目标应用有其他JSP接口。我们可以用工具扫描,但这里我们假设目标是我们的测试页面。

步骤二:设计恶意载荷我们的目标是执行一个简单的系统命令,例如在Linux上创建文件/tmp/pwned.txt作为攻击成功的标志。 对应的Java代码是:

Runtime.getRuntime().exec("touch /tmp/pwned.txt");

我们需要将这个代码片段嵌入到HTTP请求中。一种可能的方式是利用JSP的表达式语法,但需要绕过过滤。假设漏洞允许在参数中进行表达式求值,我们尝试构造如下请求:

GET /test/index.jsp?name=<% Runtime.getRuntime().exec("touch /tmp/pwned.txt"); %> HTTP/1.1 Host: target_ip:8080 ...

但这种简单的注入在稍新版本的Tomcat上都会被直接拦截或转义。

更高级的利用可能涉及:

  1. 利用EL表达式注入:如果页面使用了EL(${...}),且某些配置(如isELIgnored="false")允许,可以尝试${''.class.forName('java.lang.Runtime').getMethod('getRuntime',null).invoke(null,null).exec('touch /tmp/pwned')}。不过Tomcat对EL也有沙盒限制。
  2. 利用文件上传+包含:如果存在文件上传功能,且能上传JSP文件,或者能控制上传文件的路径和名称,再结合其他漏洞(如路径遍历)使其被当作JSP执行。
  3. 利用反序列化链:如果漏洞触发点涉及Java对象反序列化,那将需要更复杂的利用链,通常需要依赖特定的第三方库(如commons-collections)。

由于没有公开的确切PoC,我们无法进行真实的攻击模拟。安全研究中的常规做法是:分析官方补丁,对比修复前后的代码差异(Diff),从而精准定位漏洞点,再构造利用载荷。这需要一定的Java和Tomcat源码阅读能力。

4.3 使用工具进行辅助验证

在实际安全测试中,我们可能会使用一些工具来辅助探测和验证。

  1. 手工测试与Burp Suite:使用Burp Suite拦截对JSP页面的所有请求,在参数、Cookie、Header等位置尝试插入各种Payload,观察响应变化或服务器端是否执行了命令(如DNS外带、HTTP请求外带)。
  2. 漏洞扫描器:如Nessus, Qualys, 或开源工具如nuclei。这些扫描器在CVE公布后,会很快加入对应的检测模板(YAML规则)。我们可以使用nuclei来扫描我们的测试环境:
    # 在宿主机上执行,假设容器IP是172.17.0.2 nuclei -u http://172.17.0.2:8080 -t cves/2025/CVE-2025-24813.yaml
    如果存在公开的检测规则,扫描器会报告漏洞是否存在。
  3. 自定义脚本:根据对漏洞原理的理解,编写Python脚本发送特定的畸形请求,并检查服务器端是否产生了预期效果(如文件创建、特定网络连接等)。

注意事项:在测试过程中,务必监控Tomcat的日志 (/opt/tomcat/logs/catalina.outlocalhost_access_log.*.txt)。任何攻击尝试都会在日志中留下记录,这是分析攻击行为和后续加固的重要依据。同时,在测试环境中执行命令应尽量使用无害命令(如echo test > /tmp/testping -c 1 localhost),避免对测试机造成意外损害。

5. 漏洞修复方案与安全加固实践

复现漏洞是为了最终修复它。针对CVE-2025-24813,我们可以从以下几个层面进行防御。

5.1 官方补丁升级(根本解决方案)

最直接有效的方法是升级到Apache Tomcat官方已修复的版本。请访问Apache Tomcat官方网站或安全公告,查看针对CVE-2025-24813的具体修复版本。

  1. 确定升级版本:例如,公告可能指出该漏洞在Tomcat 8.5.97及以上版本、9.0.xx及以上版本中已修复。
  2. 备份现有配置和数据
    cp -r /opt/tomcat /opt/tomcat-backup-$(date +%Y%m%d) # 特别备份 conf/, webapps/ 目录,以及可能修改过的 bin/setenv.sh 等文件
  3. 下载并安装新版本:重复环境搭建中的下载和解压步骤,指向新的安全版本。
  4. 迁移配置:将备份的conf/目录下的配置文件(如server.xml,tomcat-users.xml,web.xml)谨慎地合并到新版本的conf/目录中。注意对比新旧版本配置文件的差异。
  5. 迁移应用:将webapps/目录下的应用复制到新版本目录。或者更好的做法是,重新部署应用的WAR包。
  6. 测试验证:启动新版本Tomcat,全面测试业务功能是否正常。同时,可以再次使用漏洞扫描工具进行验证,确认漏洞已修复。

5.2 临时缓解措施

如果因某些原因无法立即升级,可以考虑以下缓解措施:

  • 禁用JSP支持(如果应用不需要):对于纯API服务或使用其他模板引擎(如Thymeleaf, Freemarker)的应用,可以考虑在全局或应用级别禁用JSP。
    • 在应用的WEB-INF/web.xml中,移除或注释掉对*.jsp*.jspx的Servlet映射。
    • 更彻底的方法是,从$CATALINA_HOME/lib目录中移除jasper.jarjsp-api.jar注意:此操作风险极高,可能导致依赖JSP的应用完全无法工作,务必先在测试环境验证)。
  • 强化输入验证与过滤:在Web应用层面,对所有用户输入进行严格的校验、过滤和转义。使用安全的API,避免将用户输入直接拼接成动态JSP代码、EL表达式或OGNL表达式。
  • 部署Web应用防火墙(WAF):在Tomcat前端部署WAF,可以配置规则拦截包含可疑JSP标签、脚本片段或特殊字符的请求。WAF规则需要根据漏洞的具体特征进行定制。
  • 最小权限原则:以非root、低权限用户(如专门的tomcat用户)运行Tomcat进程。确保该用户对操作系统文件的访问权限被严格限制,无法读写关键系统目录。
    # 创建专用用户和组 groupadd tomcat useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat # 将Tomcat目录所有权赋予该用户 chown -R tomcat:tomcat /opt/tomcat chmod -R u+rX /opt/tomcat # 修改启动脚本或以该用户身份启动 sudo -u tomcat /opt/tomcat/bin/startup.sh

5.3 长期安全加固建议

  1. 持续关注安全动态:订阅Apache Tomcat安全邮件列表、关注国家漏洞库(CNNVD)和通用漏洞披露(CVE)网站,及时获取安全更新信息。
  2. 建立补丁管理流程:为生产环境的中间件制定严格的补丁更新策略和测试流程,确保安全补丁能在评估后及时、平稳地部署。
  3. 定期安全评估:定期对线上Tomcat服务进行授权下的漏洞扫描和渗透测试,主动发现潜在风险。
  4. 使用安全基线:参考安全组织(如CIS)发布的Tomcat安全基线配置指南,对server.xmlweb.xml等配置文件进行加固,例如关闭不必要的端口(如SHUTDOWN端口)、禁用不用的协议(如AJP)、设置严格的访问控制等。
  5. 日志审计与监控:开启Tomcat的访问日志和详细错误日志,并集中收集分析。设置告警规则,对异常的访问模式(如大量404错误、包含可疑字符串的请求)进行实时告警。

6. 复现过程中的常见问题与排查记录

在搭建环境和尝试理解漏洞的过程中,我遇到了一些典型问题,这里记录下来供你参考。

6.1 环境搭建类问题

问题现象可能原因解决方案
./startup.sh执行后无进程,catalina.out日志为空或迅速关闭。1. Java环境未正确安装或JAVA_HOME未设置。
2.catalina.sh等脚本权限不足。
3. 端口被占用。
1. 检查java -version。在setenv.sh(如不存在则创建于bin/下)中设置export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
2.chmod +x /opt/tomcat/bin/*.sh
3. `netstat -tlnp
访问http://ip:8080显示连接被拒绝。1. 防火墙(如ufw)或安全组规则阻止了端口。
2. Tomcat未成功绑定到0.0.0.0
1. 关闭防火墙ufw disable(测试环境)或放行端口ufw allow 8080
2. 检查conf/server.xml<Connector port="8080" ...>是否包含address="0.0.0.0"(默认绑定所有IP)。
部署WAR包后,访问应用出现404或500错误。1. WAR包解压失败或结构错误。
2. 应用依赖的库缺失。
3. JSP编译错误。
1. 检查webapps/下是否生成了对应的应用目录,检查logs/localhost.yyyy-MM-dd.log中的详细错误信息。
2. 确保应用所需的Jar包在WEB-INF/lib/下。
3. 查看logs/catalina.outlogs/localhost.yyyy-MM-dd.log,通常会有具体的JSP编译错误信息。

6.2 漏洞复现与验证类问题

问题现象可能原因解决方案
按照推测的Payload发送请求,服务器返回400/500错误,但未执行命令。1. 漏洞原理推测错误,利用链不成立。
2. Payload被WAF或Tomcat内置过滤器拦截。
3. 目标环境不存在该漏洞(版本/配置不符)。
1.这是最可能的情况。需要回归到漏洞分析本身,阅读补丁代码是唯一准确途径。
2. 检查conf/web.xml中是否配置了filter,尝试对Payload进行编码、分割等绕过测试。
3. 确认Tomcat版本和配置完全符合漏洞条件。
怀疑命令已执行,但无法验证(如/tmp/pwned.txt未创建)。1. 命令执行权限不足(Tomcat用户无权在/tmp写文件)。
2. 命令执行成功但进程被终止或输出被吞没。
3. Payload中的命令语法错误(如Windows/Linux命令混淆)。
1. 尝试更简单的验证方式,如发起一个DNS查询或HTTP请求到可控服务器(使用curlwgetping)。
2. 使用能产生明显网络侧或日志侧痕迹的命令,如ping -c 4 your-attacker-ip,并在攻击机用tcpdump抓包。
3. 在Payload中尝试执行whoami > /tmp/whoami.log并检查文件权限和内容。
扫描器报告漏洞存在,但手动无法复现。1. 扫描器存在误报。
2. 扫描器检测的是其他间接特征(如版本号),而非真正的漏洞利用。
3. 手动复现的Payload不够精确。
1. 结合扫描器报告的具体信息(如触发的URL、参数),用Burp Suite手动重放并仔细分析响应。
2. 验证Tomcat版本是否确实在受影响范围。
3. 寻找公开的、经过验证的PoC代码进行对比。

6.3 我的排查心得

  1. 日志是你的第一手资料:遇到任何问题,首先查看catalina.outlocalhost_access_log.*.txt。Tomcat的日志级别可以在conf/logging.properties中调整,调试时可以将org.apache.catalina.core.ContainerBase.[Catalina].level设置为FINEALL以获得更详细的信息。
  2. 二分法与最小化测试:当复现过程复杂时,采用二分法。先确保基础环境(Tomcat启动、应用访问)正常,再逐步添加漏洞利用的条件。构造最简单的、能证明概念(Proof of Concept)的Payload,而不是一开始就追求复杂的反弹Shell。
  3. 理解漏洞的“触发条件”与“影响”:有时候漏洞确实存在,但你的测试环境不满足全部触发条件(比如需要特定的web.xml配置、需要特定的JSP标签库)。仔细阅读漏洞公告中的“Attack Vector”和“Prerequisites”。
  4. 安全测试的边界:始终在授权和隔离的环境中进行。记录你的每一步操作,这不仅是为了回溯,也是为了形成完整的测试报告。在尝试命令执行时,优先使用无害命令进行验证。

漏洞复现是一个需要耐心、细心和扎实基础的过程。每一次成功的复现,不仅加深了对漏洞本身的理解,更锻炼了在复杂系统中定位和解决问题的能力。对于CVE-2025-24813,在官方未公布详细细节前,我们的重点应放在及时升级通用安全加固上。通过搭建环境、分析原理、尝试推演利用链,你已经走完了一个安全研究员的标准流程,这比单纯知道一个漏洞编号要有价值得多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 11:09:16

Spring AI 2.x 深度技术解析:从架构重构到企业级落地

Spring AI 2.x 深度技术解析:从架构重构到企业级落地 2026年6月12日,Spring AI 2.0.0 GA正式发布。这不仅是Spring生态中一个普通框架的版本升级,更是一次面向AI原生时代的架构重构。从2025年12月M1到2026年6月GA,历时约7个月,经历了M1、M2、M3、M4、M5、M6、RC1、RC2等8…

作者头像 李华
网站建设 2026/6/24 11:07:08

Spring AI 学习篇(十二)| MCP协议:AI世界的USB接口

Spring AI 学习篇&#xff08;十二&#xff09;| MCP协议&#xff1a;AI世界的USB接口一、本章核心学习目标二、前置知识准备三、为什么我们需要MCP协议&#xff1f;1. 紧耦合&#xff0c;无法复用2. 没有标准化3. 生态碎片化4. 安全与权限问题MCP的本质&#xff1a;AI世界的US…

作者头像 李华
网站建设 2026/6/24 11:02:43

干细胞,真能改写健康认知吗?

干细胞&#xff0c;真能改写健康认知吗&#xff1f;说起干细胞&#xff0c;很多人对它既好奇又陌生——它究竟是什么&#xff0c;又能为我们带来什么&#xff1f;其实&#xff0c;干细胞是一类具有自我更新和多向分化潜能的细胞&#xff0c;被称作生命发育过程中的「种子细胞」…

作者头像 李华
网站建设 2026/6/24 11:01:56

2026永久免费去水印软件推荐:电脑手机+在线网页无广告无内购工具合集

日常刷短视频、保存高清图片时&#xff0c;画面角落的平台水印、居中浮动水印总会影响观感&#xff0c;很多用户都在寻找真正无套路、永久免费的去水印工具。市面上大部分去水印软件看似免费&#xff0c;实则存在观看广告解锁功能、内购会员、导出自带工具水印、次数限制等隐形…

作者头像 李华
网站建设 2026/6/24 10:59:15

4.4 进阶可视化:构建多维数据画像与 AI 关系图谱

在上一节中&#xff0c;我们引入了 ECharts 和 Three.js 实现了惊艳的趋势折线图和 3D 数据星系。但对于一个专业的 AI Data Analyzer 而言&#xff0c;这还不够。AI 强大的地方在于发现隐藏的特征维度与复杂网络关系。 本节我们将继续深挖 ECharts 的潜力&#xff0c;在 Dashb…

作者头像 李华
网站建设 2026/6/24 10:56:13

Altium Designer 在PCB布局时,如何隐藏器件位号丝印

方法一&#xff1a;利用搜索全选功能搜索丝印&#xff0c;通过设置丝印显示属性实现隐藏shift F 查找 ,鼠标变成十字&#xff0c;选中丝印选择查找相似对象的对应信息点击小眼睛&#xff0c;隐藏显示隐藏后如何恢复显示随机选中择一个已被隐藏的元器件&#xff0c;点击右侧的器…

作者头像 李华