Web安全实战:深入解析XSS攻击原理与防御策略
1. 从一次“弹窗”说起XSS攻击的初体验如果你是一名前端或者后端开发者大概率在职业生涯的某个阶段会在自己负责的页面上看到一个意想不到的弹窗内容可能是“XSS”也可能是一串恶意的脚本。这不是系统彩蛋而是你遭遇了一次典型的跨站脚本攻击也就是我们常说的XSS。我第一次遇到这种情况是在一个搜索页面上线后不久安全团队发来一个链接点开之后页面上弹出了“XSS”的对话框那一刻的感觉就像精心布置的房间被人用油漆胡乱涂鸦了一样。XSS攻击的本质就是攻击者想方设法把他们编写的恶意脚本“注入”到你的网页中让它在用户的浏览器里执行。这听起来有点抽象但它的危害却非常具体窃取用户的登录凭证Cookie、Session、冒充用户执行操作比如转账、发帖、甚至将用户引导至钓鱼网站。理解XSS不仅是安全工程师的必修课更是每一位与Web开发相关的从业者必须掌握的基础防御技能。2. XSS攻击的本质与三大类型拆解要防御XSS首先得明白它到底是怎么发生的。简单来说XSS攻击的发生源于一个根本性的混淆浏览器无法区分一段文本是开发者信任的“数据”还是攻击者注入的“代码”。当网站将用户输入或来自URL、第三方等不可信来源的数据未经充分处理就直接拼接到HTML页面、JavaScript代码或DOM属性中时恶意内容就被“误认”为合法的脚本指令而执行。根据恶意脚本的“来源”和“触发执行的位置”XSS攻击主要分为三种类型存储型、反射型和DOM型。理解这三者的区别是制定有效防御策略的关键。2.1 存储型XSS潜伏在数据库里的“定时炸弹”存储型XSS也叫持久型XSS是危害最大的一种。它的攻击路径最长但影响也最广。攻击流程拆解注入攻击者找到一个可以提交并保存数据到网站后端数据库的入口比如论坛的评论框、用户昵称设置、商品评价区。他将一段恶意脚本作为普通数据提交。存储网站的后端服务器未对输入进行有效过滤或转义直接将这段包含恶意脚本的“数据”存入了数据库。触发当任何其他正常用户访问包含这条“数据”的页面时例如查看那条被污染的评论服务器会从数据库取出数据拼接到HTML响应中返回给用户的浏览器。执行用户的浏览器接收到响应将恶意脚本当作页面正常代码的一部分解析并执行。核心特点与场景持久性恶意脚本存储在服务器数据库中只要不被清理就会持续影响所有访问相关页面的用户。高危害性常用于窃取大量用户的Cookie进行“蠕虫”式传播如早年新浪微博的XSS蠕虫或进行挂马攻击。常见于所有带用户生成内容UGC且内容会被其他用户查看的功能如社交网站、博客评论、电商评价、用户消息系统。实操心得对于存储型XSS后端是防御的第一道也是最重要的防线。因为数据在这里“落地”了。任何来自用户、并最终会展示给其他用户的数据在存入数据库前都必须根据其最终的展示场景进行严格的校验和转义。不要相信前端传来的任何数据前端验证只是为了用户体验后端验证才是为了安全。2.2 反射型XSS利用链接“钓鱼”的诡计反射型XSS也叫非持久型XSS更像是一次性的“钓鱼”攻击。恶意脚本并不存储在服务器上而是“反射”在当次的URL请求中。攻击流程拆解构造攻击者精心构造一个特殊的URL其中包含恶意脚本作为参数。例如http://vulnerable-site.com/search?keywordscriptalert(XSS)/script。诱导攻击者通过邮件、社交网站、即时消息等渠道将这个恶意链接发送给目标用户并诱使其点击。链接可能被伪装成“中奖通知”、“好友分享”、“系统警告”等。反射用户点击链接浏览器向目标网站发起请求。网站的后端服务器例如搜索处理程序从URL参数keyword中取出恶意脚本。拼接与执行服务器未加处理直接将这个参数值拼接到返回的HTML页面中比如显示“您搜索的关键词是XXX”。用户的浏览器接收到这个页面解析并执行了其中的恶意脚本。核心特点与场景一次性恶意脚本存在于URL中只有点击了特定链接的用户才会中招。依赖社交工程攻击成功率依赖于攻击者诱导用户点击链接的技巧。常见于搜索功能、错误信息页面、任何将URL参数直接输出到页面的地方。因为它需要服务器参与“反射”过程所以也属于服务端漏洞。注意事项反射型XSS的防御重点同样在后端。需要对所有从请求GET、POST中获取的参数在输出到HTML前进行转义。很多开发者会忽略错误页面例如一个?errorscriptalert(1)/script的参数被直接输出到404或500错误页这同样会造成反射型XSS。2.3 DOM型XSS纯前端的“独角戏”DOM型XSS是一种比较“现代”的XSS类型它的整个攻击过程不经过服务器或者说服务器返回的响应是正常的恶意代码的取出和执行完全发生在客户端的JavaScript逻辑中。攻击流程拆解构造攻击者同样构造一个包含恶意脚本的URL但这次恶意脚本通常是隐藏在URL的片段hash即#之后的部分或参数中用于操控前端的JS逻辑。例如http://vulnerable-site.com/#scriptalert(XSS)/script。诱导同样需要诱导用户点击此链接。客户端处理用户浏览器请求页面服务器返回一个正常的静态HTML或动态页面。页面中的JavaScript代码例如使用location.hash、document.URL、window.name等API读取了URL中的恶意片段。不安全的DOM操作前端JS代码未经验证就将这些不可信的数据通过诸如innerHTML、outerHTML、document.write()、eval()等危险方式写入了页面的DOM树。执行浏览器在更新DOM时将新插入的script标签或可执行属性解析为代码并执行。核心特点与场景纯前端漏洞服务器响应可能是完全“干净”的问题出在前端JavaScript代码逻辑不安全。难以检测传统的服务端日志监控可能无法发现此类攻击因为恶意负载在URL片段中可能不会发送到服务器。常见于单页面应用SPA、大量依赖前端路由和动态内容更新的Web应用。任何使用innerHTML/outerHTML/document.write()直接拼接字符串生成DOM或者使用eval()、setTimeout(string)、location.href‘javascript:...’等API的地方都是高危区。避坑技巧防御DOM型XSS责任主要在前端。一个黄金法则是永远不要将不可信的数据作为HTML片段插入页面。优先使用textContent或setAttribute来操作文本和属性。如果框架允许如Vue/React尽量避免使用v-html或dangerouslySetInnerHTML。对于必须动态生成HTML的场景使用权威的、安全的HTML净化库如DOMPurify而不是自己写正则表达式去过滤。为了更清晰地对比这三种类型我们可以看下面的表格特性存储型XSS反射型XSSDOM型XSS存储位置后端数据库URLURL / 前端存储触发方式用户浏览正常页面用户点击恶意链接用户点击恶意链接数据流向前端 -后端- 数据库 -后端- 前端 - 执行前端 -后端- 前端 - 执行前端 -前端JS- 执行责任方主要在后端数据存储与输出主要在后端参数处理与输出主要在前端JS逻辑处理持久性持久非持久非持久3. 深入攻击向量恶意代码是如何“溜”进来的知道了XSS的类型我们还需要知道攻击者具体从哪些地方注入代码。这不仅仅是scriptalert(1)/script这么简单。攻击者的想象力非常丰富他们会利用一切可能将脚本“伪装”成数据。3.1 HTML文本内容与属性注入这是最直接的注入点。当不可信数据被直接拼接进HTML标签之间或属性值里时就可能被突破。案例1突破HTML文本假设一个页面这样显示用户名divHello, % username %/div。 如果username是scriptalert(1)/script那么生成的HTML就是divHello, scriptalert(1)/script/div脚本会被执行。防御对此处数据进行HTML实体转义。将转成lt;转成gt;转成amp;。案例2突破HTML属性假设一个图片标签img src% userAvatar %。 如果userAvatar是 onerroralert(1)那么生成的HTML是img src onerroralert(1)。这里攻击者提前闭合了src属性并添加了一个恶意的事件处理器onerror。当图片加载失败src为空就会触发alert(1)。防御不仅要对属性值进行HTML转义转义”和’还要确保属性值始终被引号包围单引号或双引号避免攻击者通过空格来添加新属性。3.2 JavaScript上下文注入当不可信数据被插入到script标签内部或内联事件处理器中时情况更复杂。案例3内联JavaScript字符串scriptvar userInput ‘% data %‘;/script如果data是’; alert(1);//那么代码变成var userInput ‘’; alert(1);//‘;攻击者通过闭合字符串插入新的JS语句。防御需要专门的JavaScript字符串转义。除了转义HTML特殊字符还需要转义JS中的特殊字符如反斜杠\、单引号’、双引号”、换行符等。通常使用\xXX或\uXXXX形式的Unicode转义。案例4内联事件处理器button onclickhandleClick(‘% data %‘)点击/button这结合了HTML属性上下文和JS字符串上下文防御需要双重转义非常容易出错。最佳实践是避免使用内联事件处理器改用addEventListener进行事件绑定。3.3 URL与CSS上下文注入案例5javascript:伪协议a href% userLink %点击这里/a如果userLink是javascript:alert(1)点击链接就会执行JS。防御方法是对URL进行校验严格限制协议白名单只允许http:https:mailto:等并过滤或拒绝任何以javascript:开头的链接注意大小写混淆和空白字符绕过。案例6CSS中的注入div stylebackground: url(‘% imageUrl %‘)如果imageUrl是javascript:alert(1)旧浏览器支持或者通过expression(...)IE特有执行代码也可能造成XSS。现代浏览器已基本修复此类问题但防御时应对CSS属性值进行专门的编码。核心原则没有“一刀切”的转义函数。必须在数据最终被插入的上下文中进行正确的转义。在HTML文本中转义在JS字符串中转义在URL参数中转义规则各不相同。这也是XSS防御复杂性的根源。4. 构建纵深防御体系从开发到部署的实战策略防御XSS不能只靠一个函数或一个环节需要一套从输入到输出、从前端到后端的纵深防御体系。4.1 输入验证与过滤设立第一道关卡虽然输入过滤不能完全解决问题但它是必要的初步筛查。白名单优于黑名单定义明确、严格的数据格式。例如用户名只允许字母数字邮箱必须符合正则表达式URL必须是以http://或https://开头的合法格式。类型与范围检查对于数字确保是数字且在合理范围内对于选项确保是预定义值之一。规范化与清理去除不必要的空白字符将字符统一为标准格式如Unicode规范化。重要提示输入过滤绝不能作为防御XSS的主要或唯一手段。它主要用于保证业务数据格式的正确性并阻挡一些非常粗糙的攻击尝试。攻击者完全可以绕过前端验证直接发送恶意请求到后端接口。4.2 输出编码转义最关键的防御壁垒这是防御存储型和反射型XSS的核心。原则是在数据输出到特定上下文时进行对应的编码。HTML正文编码当数据要插入到HTML标签之间时如div数据/div使用HTML实体编码。关键字符 - amp;, - lt;, - gt;,” - quot;,’ - #x27;(或apos;)工具几乎所有后端语言和模板引擎都内置了此类函数如PHP的htmlspecialchars Python Django模板的自动转义 Java的org.owasp.encoder库的forHtml。HTML属性编码当数据要作为HTML属性值时如input value”数据”除了进行HTML编码还需确保属性值被引号包围。工具同上使用HTML编码函数即可。关键在于属性值一定要加引号。JavaScript编码当数据要插入到script标签内的JS字符串中时。方法除了转义HTML特殊字符还需转义JS字符串分隔符和特殊字符。通常使用Unicode转义或反斜杠转义。工具使用专门的JS编码函数如OWASP Java Encoder的forJavaScript。URL编码当数据要作为URL的一部分时如查询参数、路径。方法使用百分比编码如空格 - %20 - %3C。工具标准库函数如JavaScript的encodeURIComponent Java的URLEncoder.encode。最佳实践使用成熟的、上下文感知的编码库。手动实现一个覆盖所有场景的转义函数极其困难且容易出错。强烈推荐使用OWASP ESAPI、Java Encoder等业界公认的安全库。现代模板引擎如React, Vue, Angular, Go的html/template大多具备“自动上下文感知转义”能力能根据数据插入的位置自动选择编码方式极大地降低了开发者的心智负担和出错概率。4.3 安全的DOM操作前端开发者的责任对于DOM型XSS防御核心是避免使用不安全的API。禁用危险APIelement.innerHTML userData;//高危element.outerHTML userData;//高危document.write(userData);//高危使用安全APIelement.textContent userData;//安全将数据作为纯文本插入。element.setAttribute(‘title’, userData);//相对安全但需确保userData不包含引号来突破属性通常浏览器API会处理。使用document.createElement和appendChild等方法来构建DOM节点。避免将字符串当代码执行eval(userData);//绝对禁止setTimeout(userData, 1000);//危险应使用函数引用setTimeout(function(){…}, 1000);location.href userData;//危险需严格校验协议。4.4 利用内容安全策略CSP最后的强力防线CSP是一个声明式的安全策略层通过HTTP响应头Content-Security-Policy来告诉浏览器哪些外部资源可以被加载和执行。它能极大地缓解XSS的影响即使网站存在漏洞CSP也能限制漏洞被利用的方式。一个严格的CSP策略示例Content-Security-Policy: default-src self; script-src self https://trusted.cdn.com; style-src self unsafe-inline; img-src *; font-src selfdefault-src ‘self’默认只允许加载同源资源。script-src ‘self’ https://trusted.cdn.com脚本只允许从同源和指定的CDN加载禁止内联脚本如script…/script和onclick”…”这能直接阻断大多数XSS攻击。style-src ‘self’ ‘unsafe-inline’样式允许同源和内联实践中内联样式有时难以避免。img-src *图片可以从任何地方加载。font-src ‘self’字体只能从同源加载。CSP的核心价值禁止内联脚本执行让通过script…/script或HTML属性注入的脚本失效。禁止加载外域脚本即使脚本被注入如果试图加载外部恶意JS文件也会被浏览器阻止。上报违规行为通过report-uri或report-to指令可以收集到攻击尝试的报告帮助发现潜在漏洞。实施CSP需要对现有代码进行一定改造例如将内联脚本和样式外部化但带来的安全收益是巨大的。4.5 其他补充防御措施设置HttpOnly Cookie为敏感的会话Cookie标记HttpOnly属性。这样即使网站存在XSS漏洞恶意JavaScript也无法通过document.cookie读取到此Cookie从而防止会话劫持。使用验证码对于关键操作如修改密码、转账引入验证码。这可以防止攻击者利用XSS漏洞通过脚本自动执行这些操作。控制输入长度对非受信的输入进行合理的长度限制。虽然不能防止XSS但可以增加攻击者构造复杂攻击载荷的难度。5. 开发流程中的安全实践与漏洞检测安全应该贯穿于整个软件开发生命周期SDLC而不是事后的补救。5.1 安全编码规范与培训团队应建立并强制执行安全编码规范将XSS防御要点如“输出必须编码”、“避免危险DOM API”写入开发手册。定期对开发人员进行安全意识培训让每个人都理解常见漏洞的原理和危害。5.2 代码审查与自动化扫描人工代码审查在代码合并请求Pull Request中重点关注数据流用户输入从哪里来经过了哪些处理最终输出到了哪里HTML、JS、URL输出时是否有正确的编码静态应用安全测试SAST使用SonarQube、Checkmarx、Fortify等工具在代码层面自动识别潜在的不安全函数调用如innerHTML,eval()和可能的漏洞模式。动态应用安全测试DAST使用OWASP ZAP、Burp Suite、Arachni等工具对运行中的应用进行黑盒扫描主动发送各种XSS测试载荷检查应用响应。依赖项扫描使用Snyk、Dependabot等工具检查项目依赖的第三方库是否存在已知的安全漏洞包括XSS相关漏洞。5.3 手动漏洞探测与“攻击字符串”在测试阶段可以手动使用一些经典的XSS“攻击字符串”Polyglot来测试应用的健壮性。这些字符串被设计成能在多种上下文中触发XSS。例如一个著名的PolyglotjaVasCript:/*-/*/*\/*/*/**/(/* */oNcliCkalert() )//%0D%0A%0d%0a///stYle//titLe//teXtarEa//scRipt/--!\x3csVg/sVg/oNloAdalert()//\x3e你可以将这个字符串提交到应用的所有输入点表单、URL参数观察是否有弹窗或其他异常行为。这能帮助发现那些自动化工具可能遗漏的、上下文复杂的漏洞。5.4 漏洞响应与修复一旦发现XSS漏洞应启动应急响应流程评估影响确定漏洞类型存储型/反射型/DOM型、受影响的功能、可能泄露的数据范围。紧急缓解对于存储型XSS可能需临时下线相关功能或从数据库清理恶意数据。对于反射型/DOM型可考虑通过WAFWeb应用防火墙设置临时规则拦截恶意请求。根因修复根据漏洞类型定位到出错的代码位置。是后端输出未编码还是前端使用了innerHTML应用正确的编码或改用安全API。回归测试修复后不仅要用原攻击向量测试还要进行全面的回归测试确保修复没有引入新问题或破坏原有功能。复盘与学习分析漏洞产生的原因是规范缺失、培训不足还是工具失效更新开发规范对团队进行案例分享防止同类问题再次发生。防御XSS是一场持久战它要求开发者在每一次处理用户数据时都保持警惕。通过理解原理、采用正确的编码实践、利用CSP等安全机制、并辅以严格的安全流程我们可以构筑起一道坚实的防线保护用户的数据和信任。记住安全没有银弹但层层设防能让你的应用固若金汤。

相关新闻

警惕智能体优先:AI工程中的技术债务陷阱

警惕智能体优先:AI工程中的技术债务陷阱

1. 项目概述:当“智能体优先”成为技术债务的温床“Agent-First”这个词,最近两年在AI工程圈里几乎成了某种政治正确。你参加一场技术分享会,十有八九能听到“我们正在构建一个端到端的智能体工作流”;翻几页招聘JD,动…

2026/7/4 11:44:16阅读更多 →
从原理到实践:基于Security-Datasets复现与检测GoldenSAML攻击

从原理到实践:基于Security-Datasets复现与检测GoldenSAML攻击

1. 项目概述:为什么我们要亲手复现GoldenSAML攻击? 如果你是一名安全工程师、SOC分析师或者对身份认证安全感兴趣的研究者,那么“GoldenSAML”这个词对你来说一定不陌生。它早已不是新闻,而是近年来针对云身份和SAML协议最臭名昭著…

2026/7/4 11:39:16阅读更多 →
STM32智能散热系统设计:DRV8213驱动与PID温控

STM32智能散热系统设计:DRV8213驱动与PID温控

1. 项目背景与核心需求在嵌入式系统开发中,散热管理一直是工程师面临的关键挑战之一。特别是在汽车电子、工业控制和医疗设备等对可靠性要求极高的领域,过热可能导致系统性能下降、元件寿命缩短甚至硬件损坏。传统散热方案往往体积庞大或控制逻辑简单&am…

2026/7/4 11:39:16阅读更多 →
STM32矩阵键盘硬件去抖动与中断优化方案

STM32矩阵键盘硬件去抖动与中断优化方案

1. 项目背景与硬件选型解析在嵌入式系统开发中,键盘输入是最基础的人机交互方式之一。2x2矩阵键盘凭借其结构简单、成本低廉的优势,成为许多控制面板的首选方案。但传统矩阵键盘存在两个主要痛点:按键抖动导致的误触发,以及GPIO资…

2026/7/4 12:29:19阅读更多 →
OpenCVSharp卡尺算法实现工业圆检测

OpenCVSharp卡尺算法实现工业圆检测

1. 项目背景与核心目标 在工业检测和精密测量领域,圆形目标的定位精度直接影响产品质量控制的可靠性。传统人工测量方式效率低下且易受主观因素影响,而基于机器视觉的自动化测量技术正逐渐成为主流解决方案。本项目开发的卡尺找圆工具,正是针…

2026/7/4 12:29:19阅读更多 →
Linux系统权限提升攻防:从SUID、Sudo到内核漏洞的20种实战路径

Linux系统权限提升攻防:从SUID、Sudo到内核漏洞的20种实战路径

1. 项目概述:为什么我们需要系统性地了解Linux提权?在Linux世界里,权限就是一切。无论是作为系统管理员、安全研究员,还是渗透测试工程师,理解权限如何被获取、滥用和防御,都是核心技能。我见过太多因为一个…

2026/7/4 12:29:19阅读更多 →
D-FOT源码解析:深入理解动态反馈优化框架的核心实现机制

D-FOT源码解析:深入理解动态反馈优化框架的核心实现机制

D-FOT源码解析:深入理解动态反馈优化框架的核心实现机制 【免费下载链接】D-FOT dynamic feedback-directed optimization tool for openEuler 项目地址: https://gitcode.com/openeuler/D-FOT 前往项目官网免费下载:https://ar.openeuler.org/ar…

2026/7/4 12:29:19阅读更多 →
锂离子电池保护与BQ29200选型设计指南

锂离子电池保护与BQ29200选型设计指南

1. 锂离子电池过压保护的必要性与BQ29200选型考量锂离子电池因其高能量密度和长循环寿命,已成为便携式电子设备、电动工具乃至电动汽车的主流储能方案。但这类电池对工作电压极为敏感——单节锂离子电池的标称电压为3.7V,充电截止电压通常为4.2V50mV。当…

2026/7/4 12:29:19阅读更多 →
BOTW存档编辑器完整教程:如何轻松修改塞尔达传说旷野之息游戏存档

BOTW存档编辑器完整教程:如何轻松修改塞尔达传说旷野之息游戏存档

BOTW存档编辑器完整教程:如何轻松修改塞尔达传说旷野之息游戏存档 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 厌倦了在海拉鲁大陆上反复刷资源&…

2026/7/4 12:24:19阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/3 14:18:39阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/3 14:38:35阅读更多 →
端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

1. 项目概述:当算法工程师走进GTC26展厅,看到的不是芯片,而是“端到端”的呼吸节奏“端到端”这三个字,在GTC’26现场出现的频率,高得像NVLink带宽测试时的峰值曲线——它不再是一个论文里的技术路径选项,而…

2026/7/4 0:02:48阅读更多 →
缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考牙齿缺失是中老年人群中较为常见的口腔问题,不仅会造成咀嚼不便、进食受影响,长期还可能对营养摄入与日常社交带来困扰。义齿是改善缺牙问题的常用方式,目前市面上的义齿种类较多,…

2026/7/4 0:02:48阅读更多 →
STM32F091RC与LTC6904实现高精度方波信号生成

STM32F091RC与LTC6904实现高精度方波信号生成

1. 项目概述:LTC6904与STM32F091RC的精准方波生成方案在嵌入式系统开发中,精确的时钟信号和定时控制往往是项目成败的关键。LTC6904作为一款低功耗、高精度的可编程振荡器芯片,与STM32F091RC这款ARM Cortex-M0内核微控制器的组合,…

2026/7/4 0:02:48阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/4 1:16:56阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/4 2:33:55阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/4 2:33:55阅读更多 →