堆叠注入实战:从原理、数据库差异到防御闭环

做渗透测试久了,你会发现很多漏洞点卡在“技术路线”上。比如SQL注入,多数人一上来就不假思索试union注入,查表拿数据确实好用;可总有那么一类场景,参数明明能用引号闭合,页面却死活不回显数据,想用报错注入,异常信息又被框架吞得干干净净。如果此刻你能在参数后面补一个分号,塞进去第二条独立语句,就会打开一个完全不同的利用空间——堆叠注入。这门技术能让你从“只能查”升级到“能写、能改、能调存储过程”,对排查高危漏洞和做代码修复都很有价值。这篇文章会从原理讲起,拆数据库差异,再给一套我自己常用的探测与利用流程,最后落到防御闭环上,适合正在做渗透测试、代码审计或Web开发的同学参考。

1. 堆叠注入的核心原理:一条请求如何在数据库里“得寸进尺”

1.1 分号的真实身份:语句分隔符,不是注入标记

很多开发者对SQL注入的理解停留在“参数里有单引号”“出现了select关键字”这类表象,但堆叠注入的关键完全不在单引号,而在分号本身。在SQL语法里,分号是一条语句的结束符,表示“这条命令到这里为止,后面是新的命令”。数据库客户端接收到的如果是一段包含多个分号的文本,某些连接层会把这段文本直接扔给服务端,服务端则逐条解析、逐条执行。

可以类比成命令行操作:你在终端粘了一段多行脚本,每行是一条命令,回车后系统一行一行跑完。Web应用原本只打算执行一条SQL,但因为开发时用了字符串拼接,用户提供的参数直接混进SQL文本,就相当于你在命令行输入框里额外贴了几条新命令。比如接口里面最终拼出来的语句是:

SELECT * FROM user WHERE id=1; UPDATE user SET email='t@example.com' WHERE id=1;

数据库执行时,先查出id为1的用户,再顺手更新了这条记录的邮箱。这个UPDATE和前面的SELECT没有关系,它完全是第二条独立的语句。堆叠注入的本质,就是利用分号开启“新执行线”。

注意:不是说看见分号就能堆叠,必须同时满足三个条件:应用层把参数拼进了SQL、连接层允许多语句传输、参数本身能平滑闭合掉原语句的语境限制。

1.2 堆叠注入和union注入的本质差异

union注入和堆叠注入经常被放在一起对比,但它们是两个层级的东西。union注入是在一条SELECT内部做文章,通过union关键字把两个查询结果集合并输出,要求前后查询的列数一致、数据类型兼容,而且最终必须靠页面上的回显来展示数据。它最大的局限在于:只能查询,不能执行UPDATE、DELETE、INSERT这类写操作,更不能直接调用存储过程。

堆叠注入则完全不同。它不需要关心原查询返回几列,也不需要回显位置,因为第二条语句是独立执行的。你可以任意写一条新的SQL,想删表、想改数据、想调用函数、想延时,都在这个新的执行空间里发生。这也是为什么有人说“堆叠注入比union注入危害大得多”的根本原因。

不过有个反直觉的点:堆叠注入的第二条语句即使执行成功了,它生成的结果集一般也不会回显在页面上。因为Web后端通常只取第一条查询的结果,第二、第三条语句的结果集要么被丢弃,要么直接导致程序报错。所以堆叠注入大多数情况下是“盲利用”的,要么通过时间延迟来确认执行成功,要么靠数据的被动变化来验证,很少能直接从响应里看到第二条查询的数据内容。

1.3 堆叠注入成立的三道门

在真实测试里判断一个注入点能不能堆叠,我习惯按三道门来排查。

第一道门是“入口是否可拼凑”。这取决于代码本身,如果接口用的是安全的参数化查询或者ORM封装,那堆叠注入的第一步就无从谈起,因为用户输入会被当作纯数据处理,而不是作为SQL语法的一部分。反之,如果代码里有类似String sql = "SELECT * FROM user WHERE id=" + id;这样的拼接点,入口就算敞开了。

第二道门是“原语句上下文是否闭合”。注入点如果是数字型参数,可以直接在分号后面接新语句。如果是字符串型参数,你得先让前面的单引号正确闭合,比如'结束原条件的值,再补分号启动新语句,最后用注释符把原SQL尾部多余的内容吃掉。

第三道门是“连接层是否允许多语句”。这是最容易被忽略却又最关键的一步。很多语言驱动在默认配置下只执行第一条语句,比如某些版本的JDBC驱动不开启allowMultiQueries=true,发再多分号也只会当语法错误处理。后面章节我会专门展开这一点。

2. 不同数据库环境下的堆叠注入:支持程度和利用思路完全不同

2.1 一张表看懂主流数据库的支持差异

堆叠注入不是所有数据库都“一视同仁”。我自己做授权测试时,碰到的环境五花八门,先把常用的数据库支持情况整理成了一张对比表,方便你在遇到具体场景时快速对号入座。

数据库是否常见支持多语句典型限制常用测试语句
MySQL部分支持取决于驱动是否开启多语句,原生命令行直接支持1;SELECT SLEEP(3);--+
SQL Server支持程度较高T-SQL本身语法丰富,默认多语句可用1;WAITFOR DELAY '0:0:3';--
PostgreSQL部分支持受连接协议和驱动影响,多语句不一定整段执行1;SELECT pg_sleep(3);--
Oracle通常受限普通JDBC/OCI不直接支持分号多语句,多走PL/SQL块;BEGIN DBMS_LOCK.SLEEP(3);END;
SQLite部分支持取决于C接口,有的接口每句单独编译1;SELECT random();--

这张表只是“常见默认配置”下的参考,生产环境里驱动版本、连接参数都会影响最终结果。所以在确认数据库类型后,不能光凭“文档说支持”就下结论,一定要在目标环境里做一次无危害探测,用无害延时语句验证通道是否真的打通。

2.2 MySQL场景:预编译语句是重头戏

MySQL在堆叠注入里最经典的用法是配合预处理语句,即PREPARE+EXECUTE。这种玩法不单单为了炫技,它能解决一个很现实的过滤问题:很多WAF或代码层过滤器会对敏感关键字做黑名单拦截,比如看到select、sleep就直接拒绝,但如果你把关键字拆成片段,再用字符串拼接还原,过滤器就未必认得了。

一个典型的Payload思路长这样:

SET @cmd = CONCAT('sel','ect sl','eep(5)'); PREPARE stmt FROM @cmd; EXECUTE stmt;

把它拼接进注入点时,整体文本就是:

SELECT * FROM user WHERE id=1;SET @cmd = CONCAT('sel','ect sl','eep(5)');PREPARE stmt FROM @cmd;EXECUTE stmt;--+

数据库实际执行时,SET语句把拼接出来的字符串赋给变量,PREPARE再把变量内容当作SQL文本编译,最后EXECUTE执行。原本被切碎的关键字在最终执行阶段才被还原,黑名单过滤自然就漏了。要注意,这里的CONCAT本身也可能被过滤,实际测试时可以换成CHAR()函数用ASCII码拼接,或者用十六进制字符串,套路是一样的,都是在执行前动态生成语句文本。

2.3 SQL Server场景:T-SQL给了更多素材

如果你在SQL Server环境下遇到堆叠注入,能用的素材比MySQL更丰富。T-SQL本身支持局部变量、流程控制、错误处理,还能直接调用存储过程。这意味着堆叠注入一旦确认,攻击者不只是“多执行一条语句”,而是把整个数据库当成了自己的脚本运行环境。

最常见的探测语句是;WAITFOR DELAY '0:0:3'--。和MySQL不同,SQL Server没有SLEEP()函数,所以延时盲注需要靠WAITFOR来制造停顿。如果这条语句执行后响应时间明显拉长到3秒左右,就说明多语句通道是通的,而且注入点权限至少能执行这类简单的T-SQL语句。

再往后,利用方向就取决于数据库账号权限了。权限大一点,可以读写文件、调用系统级存储过程;权限小一点,也能折腾数据定义和数据操纵。我的建议是:在授权测试里做到“证明危害”即可,不要真的去破坏数据。比如创建一个临时测试表、写入一条标记记录、确认后立刻删除,就已经足够给报告提供一个高可信度的证据链。

2.4 其他数据库:别默认认为都能用

PostgreSQL和Oracle的情况相对复杂。PostgreSQL的协议允许通过简单查询发送多语句,但很多驱动在接收端做了限制,不能保证整段都执行。Oracle在JDBC连接驱动下基本不支持分号分隔的多语句,普通注入里更常见的是利用PL/SQL匿名块来实现类似效果,但前提条件更多,语法也更挑剔。

所以在测试阶段,遇到非MySQL/SQL Server的环境,不要一上来就在堆叠注入上死磕。先花两分钟用无害的延时语句探一下路,通道不通就果断换别的手法。工具再厉害也架不住环境不支持,合理转换利用方向才是渗透测试里最核心的决策能力。

3. 实操过程:从探测到利用的完整闭环

3.1 第一步:先确认这是一个可闭合的注入点

无论最终走哪条利用路线,第一步永远是确认注入点是否存在,以及参数类型是哪一种。以接口GET /user/info?id=1为例,我的测试顺序一般是这样:

先原样请求一次,记下响应长度和内容。再输入1',如果页面报错、返回异常,说明单引号参与进了SQL语法。然后输入1'--+或1'#,如果恢复正常,说明注释符生效,前面的单引号已经闭合了原语句。最后输入1 AND 1=1和1 AND 1=2,通过这两种响应的差异,确认当前参数确实能影响SQL判断逻辑。

这一套流程做完,基本就能判断是数字型还是字符串型注入点,以及原查询大概长什么样。堆叠注入和普通注入在“探测阶段”并没有太大区别,区别只在于后续Payload的构造方式。

3.2 第二步:用无害语句验证多语句通道

确认注入点之后,不要急着上危险操作,先测通道。我常用的无害验证手法是时间延迟,因为它不会改变数据,又能很明确地反映执行情况。

MySQL环境下测试地址可以写成:

GET /user/info?id=1;SELECT SLEEP(3);--+

这里有个细节:URL里的分号最好编码成%3B,因为有些中间件或安全产品会解析原始分号,也可能因为URL规范问题把参数截断。写成id=1%3BSELECT SLEEP(3)%3B--+能减少很多意外的格式问题。

请求发出去后,观察响应时间。如果原本几十毫秒的页面突然变成三秒多,说明第二条SLEEP语句实际执行了。此时再发一次不带的正常请求,确认响应时间恢复正常,基本就能判定堆叠通道可用。为了保险,我还会换一个不同位置的延时函数再测一次,比如MySQL里用BENCHMARK(10000000, SHA1('a')),能避免偶然的延迟抖动导致误判。

3.3 第三步:构造一条完整的堆叠注入做利用

通道确认后,再做一次完整的DML利用演示,目的是验证“不只是延时能执行,写操作也能执行”。假设这是一个授权靶场环境,目标表有一列remark,我们可以用下面这种方式做无害标记:

GET /user/info?id=1;UPDATE user SET remark='stacked_ok' WHERE id=1;--+

执行后,去数据库里查一下对应记录的remark字段,如果变成了stacked_ok,证明写操作链路是通的。此时立刻再执行一条反向语句把数据恢复原状,并检查有没有留下其他测试痕迹。

这一步我强烈建议只在授权靶场里做。真实现网环境里,修改数据本身就是一种破坏行为,无论修改的字段看起来多无害,都可能影响业务逻辑。渗透测试的专业性恰恰体现在“如何做到可验证且不留痕”,而不是“能不能改”。

3.4 延时盲注:堆叠注入最常见的落地姿势

既然第二条查询一般没有回显,堆叠注入在实际利用时最依赖的其实是延时盲注。原理很简单:把条件判断放进一个延时函数里,如果条件成立就等上几秒,条件不成立就立即返回,然后通过响应时间差异来推测数据内容。

一个常见写法是:

id=1;SELECT IF(1=1, SLEEP(3), 0);--+

当想逐字符猜解数据时,可以配合SUBSTRING、ASCII等函数,把单个字符的ASCII码作为条件写进IF判断。比如判断数据库用户名的第一个字符是否为某个值,写成类似这样:

id=1;SELECT IF(ASCII(SUBSTRING((SELECT USER()),1,1))=115, SLEEP(3), 0);--+

如果响应时间明显拉了3秒,说明猜对了。这种猜解方式虽然慢,但在union回显不可用、报错信息被屏蔽的环境里,是少数能稳定“拿数据”的手段之一。自动化工具也基本沿用这个逻辑,只是把逐字符判断流程封装成了黑盒。

3.5 工具辅助:sqlmap如何配合堆叠测试

手动流程跑通之后,再用工具扩大覆盖面是合理的。sqlmap里与堆叠注入直接相关的参数是--stacked-queries,示例命令如下:

sqlmap -u "http://127.0.0.1:8080/user/info?id=1" --stacked-queries --batch

这个参数会让sqlmap在常规注入探测之外,额外地尝试;分隔的多语句Payload。需要理解的是,它并不是“强制开启堆叠”,而是把堆叠类测试加入检测队列,最终能否生效仍然取决于目标环境是否支持多语句。

我见过不少人直接把工具丢上去跑一天也没结果,最后才发现问题可能出在手工判断那一步。工具只是执行者,不是决策者。如果你前面已经通过无害延时语句确认了通道存在,再用工具时会顺利很多;反之通道没确认,工具大概率也只是在那边空转。建议先用手工方法把“能否堆叠”这个事实锤死,再交给工具去扩展猜解深度。

4. 常见问题与排查技巧实录

4.1 分号发了,第二条语句没有执行

这是最典型的挫败场景:明明Payload写得没问题,延时也写了,响应时间就是纹丝不动。问题大概率不在Payload,而在连接层。

比如某些PHP环境用了mysqli但没开启CLIENT_MULTI_STATEMENTS标志,驱动默认只执行第一条语句,后面的分号内容根本不会被解析。Java JDBC也需要在连接串里显式加allowMultiQueries=true才支持多语句。换句话说,堆叠注入能不能成,一半的命脉握在数据库驱动配置手里。

排查方式很简单:本地搭一个和线上同版本的最小环境,用同样的连接参数执行一遍同样的多语句,同时开启数据库的通用日志(比如MySQL general_log),看服务端到底做了什么解析。如果日志里只有第一条记录,说明连接层根本没把第二句送进来。

4.2 页面白屏,数据却被改了

有时候你看到一个很诡异的现象:请求发出去后页面直接白屏,错误信息也没有,但再去查数据库,发现数据确实被改了。这说明第二条语句执行成功了,WAF也没拦,但Web程序在处理第一条结果时出了岔子。

其实这不是“出问题”,而是堆叠注入的正常副作用。因为第二条语句产生了结果集或影响了原流程,后端代码预期只处理一个查询结果,多出来的数据让程序异常了。碰到这种场景不用慌,反而可以利用“白屏”作为执行成功的标志,结合数据变化来确认堆叠链路。

需要注意:如果一次测试请求同时执行了多条语句,后端的异常可能掩盖真实结果。所以我在利用阶段会尽量保持“前一条可回显,后一条做数据操作”的节奏,并且在每次请求后主动检查数据库状态,而不是依赖页面输出。

4.3 注释符或分号被安全设备拦截

很多WAF会把分号、--、#这类符号列入敏感特征。分号被拦截时,可以先尝试URL编码成%3B,如果编码后还是被解出来拦截,基本就是WAF在应用层做了更深的解码。此时与其在编码上死磕,不如退一步评估:这个站点的防御重心是不是已经到了“不需要绕”的阶段。

我个人的习惯是:遇到硬拦截先做一个快速试探,最多换两种编码方式,如果三层尝试都不通,就换用报错注入或普通时间盲注,不再硬刚WAF。堆叠注入只是手段之一,不是所有注入点都非它不可。安全测试的关键是“拿到足够写报告的证据”,而不是在单一技术上钻牛角尖。

4.4 延时不稳定,误判成不支持

延时不稳定也会造成很大误导。你可能发了一个SLEEP(5),结果响应只慢了0.8秒,于是判断“堆叠不通”,其实只是数据库整体负载高、调度延迟,或者驱动把多语句拆成两次单独提交,第一次语句和第二次语句之间产生了执行间隙。

调试方法是多测几个不同的延时函数,并加长延时时间。MySQL可以用BENCHMARK(50000000, SHA1('x')),SQL Server用WAITFOR DELAY '0:0:5',PostgreSQL用pg_sleep(5)。同时把请求重复三到五次,看延迟是否稳定对应。如果每次都有稳定的延长时间,基本可以认定堆叠是通的,只是第一次的探测值太小被背景噪音盖过去了。

4.5 常见问题速查表

现象可能原因解决思路
分号后语句不执行驱动未开启多语句支持查连接参数,跑最小环境做对比
页面空白但数据变了第二条语句执行成功,后端处理异常用数据变化作为执行成功标志
分号被WAF拦截安全设备对分号有敏感规则换编码、换注入手法,不硬刚
延时时间不稳定数据库负载或驱动拆分语句加长延时,多次请求对比线程时长
注释符不生效各数据库注释语法不同MySQL用--+,SQL Server用--加空格

5. 防御方案:治标更要治本

5.1 代码层修复:参数化查询才是根治

堆叠注入的根因永远是“用户输入被当成了SQL代码”。所以第一道防线就是代码层的参数化查询。以最常见的Java JDBC为例,安全写法是:

String sql = "SELECT * FROM user WHERE id=?"; PreparedStatement ps = conn.prepareStatement(sql); ps.setInt(1, id); ResultSet rs = ps.executeQuery();

这个写法里,用户输入通过占位符?传给驱动,驱动会把输入序列化为纯数据,而不是拼接进SQL文本。无论用户传1;DROP TABLE user;--还是1' OR '1'='1,在驱动眼里都只是一个普通的字符串参数,分号不复存在,新语句自然也无从谈起。

我看到不少团队觉得“加了ORM就不会有注入”,其实不然。如果代码里写了原生查询,或者用了createNativeQuery、@Query之类的拼接方式,一样会暴露风险。关键是培养一种判断习惯:只要SQL语句模板中出现用户可控的字符串,就必须走参数化接口,这是无论什么ORM都改变不了的原则。

5.2 连接层配置:直接抽掉“多语句”钥匙

即使代码里有一两个没做参数化的漏网点,如果连接层禁用了多语句,堆叠注入仍然很难落地。这就是纵深防御的意义。

具体配置方向上,各种语言驱动都有自己的开关。Java的连接串不要加allowMultiQueries=true,PHP mysqli不要使用CLIENT_MULTI_STATEMENTS标志,PDO相关驱动注意多语句连接属性默认值,数据库账号权限也要同步收缩。我见过最典型的案例:Web应用用的是只读账号,DML操作即使被注入也执行不了,堆叠注入的危害直接降了一个量级。最小权限原则不是口号,它真的能把很多攻击手法“掐死在权限门口”。

数据库端还可以关闭不必要的文件读写权限、移除不用的危险存储过程,并定期审计所有数据库账号的角色和权限。这些工作在攻防视角看来可能不直接,但从防御角度说,每一层设置都会让攻击链多断一次。

5.3 检测与审计:在日志里定位堆叠迹象

如果应用已经把用户输入拼进了SQL,WAF也没拦住,最后一个兜底手段就是检测与审计。堆叠注入在流量和日志里其实有明显特征:同一个参数里出现了多个SQL关键字,比如select;update、select;drop这种组合;或者请求体中出现了编码后的分号加常见SQL函数,如%3Bselect sleep。

数据库侧可以开启审计日志,重点监控同一连接内短时间内出现PREPARE、EXECUTE、SET组合的情况。WAF规则也可以加一条“分号后出现SQL保留字”的告警策略。不过要提醒一句:检测规则会产生误报,比如有些业务确实会正常使用多语句操作,需要结合业务白名单来收敛。

从防御整体来看,我的建议始终是:不要追求“把所有堆叠Payload都拦截住”,这是目标,但不应只靠这一层。代码参数化、连接层关闭多语句、数据库账号做最小授权,这三件事同时落地,再配合日志审计,堆叠注入的攻击面才能真正被压缩到极小。

最后说一点个人体会:在授权测试中碰到堆叠注入,最容易被忽略的往往不是注入点本身,而是连接层的默认配置。不少老系统用的框架版本较旧,数据库连接从没做过“只允许单语句”的设置,才让一个看似普通的分号变成了高危通道。修复时如果只盯着“过滤分号”这种思路,过几天换个编码方式、换个函数写法就能绕回来。所以我的建议一直是:把用户输入当数据,把多语句能力在连接层关掉,再结合数据库权限和日志审计一起上。这三件事做完,堆叠注入才算真正失去了落地空间。

相关新闻

明日方舟助手:C++图像识别与状态机实现自动化

明日方舟助手:C++图像识别与状态机实现自动化

简介:这是一份面向明日方舟玩家的自动化辅助工具源码,基于图像识别技术实现日常任务的一键执行,适合具备C基础、对计算机视觉与游戏自动化感兴趣的中高级开发者研究学习。资源包共2000个文件,以1487个json配置数据、190个h头文件、…

2026/10/19 17:31:28 阅读更多 →
基于书评文本的推荐系统:Java实现标签提取与相似度匹配

基于书评文本的推荐系统:Java实现标签提取与相似度匹配

简介:一套基于网络书评文本内容的个性化书籍推荐系统设计源码,面向Java开发者、推荐系统研究者及自然语言处理入门者,解决如何从大量书评中甄别有效评论、构建书籍标签集并计算标签关联度,以实现内容精准匹配的问题。压缩包共40个…

2026/10/19 17:30:16 阅读更多 →
开源工具链搭建代码审查闭环:从提交前检查到合并门禁的落地实践

开源工具链搭建代码审查闭环:从提交前检查到合并门禁的落地实践

在研发团队里聊代码审查,讨论到最后往往不是“要不要做”,而是“怎么让审查真正落地”。代码审查这个东西,大家都知道重要,可真到了交付压力大的时候,最先被砍掉的流程往往就是它。我自己做过一段时间的研发效能和工程…

2026/10/19 17:30:16 阅读更多 →

最新新闻

5 分钟上手 liboqs:后量子密码学 C 库的新手完整指南

5 分钟上手 liboqs:后量子密码学 C 库的新手完整指南

5 分钟上手 liboqs:后量子密码学 C 库的新手完整指南 【免费下载链接】liboqs C library for prototyping and experimenting with quantum-resistant cryptography 项目地址: https://gitcode.com/GitHub_Trending/li/liboqs liboqs 是一个用 C 编写的开源后…

2026/10/20 1:18:52 阅读更多 →
连接器与自动化控制厂商评估:三维度框架甄选长期合作伙伴

连接器与自动化控制厂商评估:三维度框架甄选长期合作伙伴

做设备集成和产线升级的工程师,应该都遇到过这种尴尬:聊连接器,一堆做线缆和接插件的厂商讲得头头是道,但一问到总线协议、运动控制和故障诊断,马上含糊其辞;反过来,找自动化整体方案&#xff0…

2026/10/20 1:18:52 阅读更多 →
php内存缓存插件yac的安装配置--平替apcu,多进程共享内存

php内存缓存插件yac的安装配置--平替apcu,多进程共享内存

1. 安装依赖与Yac扩展1.1 安装PHP开发工具及依赖Bashsudo apt update sudo apt install php7.4-dev php-pear pkg-config # 开发工具与PECL管理器1.2 通过PECL安装YacBashsudo pecl install yac安装过程需确认时,直接按回车使用默认配置。⚙️ 2. 配置PHP加载Yac扩…

2026/10/20 1:18:52 阅读更多 →
Tailwind组件库实战:从原子类到主题定制与避坑指南

Tailwind组件库实战:从原子类到主题定制与避坑指南

简介:这是一份 Tailwind CSS 6.23 版本的组件库资源包,面向 Web 前端开发者与 UI 工程师,以 utility-first 为核心,汇总了高频组件、实用类和官方 Tailwind UI 最佳实践,帮助快速搭建响应式、无障碍的现代界面&#xf…

2026/10/20 1:18:52 阅读更多 →
N_m3u8DL-RE流媒体下载工具实用指南:5分钟跑通 M3U8/MPD 点播与直播下载

N_m3u8DL-RE流媒体下载工具实用指南:5分钟跑通 M3U8/MPD 点播与直播下载

N_m3u8DL-RE流媒体下载工具实用指南:5分钟跑通 M3U8/MPD 点播与直播下载 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/n…

2026/10/20 1:18:52 阅读更多 →
FLUX 3 Image Klein能商用吗?FLUX Kommunity License许可条款与合规红线实战指南

FLUX 3 Image Klein能商用吗?FLUX Kommunity License许可条款与合规红线实战指南

人工智能大模型基础模型媒体生成计算机视觉 【免费下载链接】flux-3-image-klein-base 项目地址: https://ai.gitcode.com/hf_mirrors/black-forest-labs/flux-3-image-klein-base 点击查看 免费下载 本文带你快速搞懂 FLUX 3 Image Klein 能商用吗 这个高频问题。…

2026/10/20 1:17:52 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →