Pikachu靶场实战:文件包含漏洞从原理到利用与防御全解析

1. 认识文件包含漏洞:一个include引发的连锁反应

1.1 文件包含漏洞到底是什么

很多刚入门的朋友第一次听到“文件包含”四个字,第一反应是“是不是类似引用别人的代码库”。这么理解大方向没错,但要害在于:在PHP这类服务端脚本语言中,include和require这套指令的行为非常直接——它会把指定文件当作代码解析执行,而不是当作普通文本读取。

我习惯用一个比喻来帮助理解。这就好比食堂打饭,师傅(服务器)问你想吃什么菜,正常情况下你只能从菜单(白名单)里选。但有一天菜单系统坏了,打饭窗口开了一个口子,师傅会直接把你递过来的纸条当成菜名去后厨取菜。如果纸条上写的是“宫保鸡丁”,这还算正常;但如果你写的是“把冰箱里的生肉直接端出来”,师傅也会照做——问题就出在这里。

放到Web代码里,典型问题出现在这类写法:

$file = $_GET['filename']; include($file);

这段代码的核心逻辑是从URL参数里取一个文件名,然后加载它。问题在于,这个参数完全没有过滤,用户可以把它改写成任意路径,甚至是带有特殊协议的路径。服务器一旦加载了不该加载的内容,轻则读取源码泄露敏感信息,重则直接执行服务器上的其他脚本。

Pikachu靶场专门为这个漏洞设计了独立的练习模块。模块代码刻意模仿了真实项目中常见的错误写法,并提供了本地文件和远程文件两种不同的练习场景。对想系统梳理Web安全基础的人来说,这几乎是最便捷的练手方式——不需要接触真实业务系统,也不用自己搭一整套应用,打开靶场就能开始练。

1.2 本地包含与远程包含,区别在哪里

如果按触发方式和利用范围来分,文件包含漏洞大致可以拆成两类:本地文件包含(LFI)和远程文件包含(RFI)。

本地文件包含的特点是:攻击者只能读取服务器本地的文件,比如/etc/passwd、应用自身的配置文件、日志文件等。虽然不能直接把自己的代码传上去,但通过读取源码可以进一步挖掘其他漏洞,或者利用日志和会话文件中的内容构造二次利用。

远程文件包含则更直接——它允许攻击者把包含目标指定到一台自己能控制的服务器上。也就是说,攻击者可以让目标服务器去加载并执行一段完全由自己定义的脚本。一旦RFI成立,基本等同于拿到了代码执行权限。

在Pikachu靶场里,这两类场景都有对应的练习。本地包含的模块页面长得很普通,一个下拉选择框加上一个“确定”按钮,看起来像某个后台的模板选择功能。远程包含则需要先调整PHP配置,允许加载远程文件,再构造特定的URL来验证效果。

从学习顺序上看,我建议先做LFI再做RFI。原因很简单:LFI的利用思路更基础,需要你对路径结构、伪协议、日志位置有整体感觉,而这些恰好是RFI的前置能力。等你能熟练地通过一个参数读到系统文件,再尝试远程包含,整个过程会顺滑很多。

2. 环境准备与靶场启动:一次装到位的心得

2.1 本地运行环境的搭建方式

Pikachu靶场本质上是一套PHP项目,运行起来需要Web服务器和数据库。我这次是在一台自己完全掌控的电脑上搭建的,整个过程踩了几个小坑,但总体不复杂。

实际操作中常见的方案有三种。

第一种是直接使用集成环境。下载一个带PHP的集成环境包,解压后放进Web根目录,启动服务就能访问。这种方式最省事,适合不想折腾环境配置的朋友。

第二种是手动配置环境。如果你的机器上已经装了独立的PHP环境,直接修改虚拟主机配置,把域名指向靶场目录即可。手动配置的好处是灵活,方便后面调试php.ini参数。

第三种是使用容器方式部署。用现成的镜像把靶场跑起来,几分钟就能完成,而且不污染本机环境。不过容器方式对新手有一个小门槛:需要理解端口映射和数据目录挂载,否则文件访问权限可能会出问题。

我这次用的是集成环境加手动微调的方式。大致步骤是:把靶场代码解压到Web根目录,创建数据库并导入靶场自带的SQL文件,修改靶场配置脚本中的数据库连接信息,最后通过浏览器访问安装向导完成初始化。

注意:Pikachu靶场是安全训练专用环境,只应该在你完全控制的、未接入公网的物理机或虚拟机上运行。千万不要把它部署在公网服务器上,更不能直接对公网开放——它存在的目的就是被“打”,放出去等于引狼入室。

安装过程中最容易被忽略的是数据库字符集设置。如果建库时没有指定正确的字符集,后续练习时页面可能会出现中文乱码,或者部分功能异常。我第一次安装时就忽略了这一点,结果乱码问题花了近半小时才排查清楚。

2.2 靶场目录结构与配置要点

装好后,我习惯先花几分钟浏览一遍目录结构。这个过程不能省——它决定了你后面能否快速定位漏洞代码的位置。

靶场的目录大致分为几块:根目录的入口文件负责路由,公共目录放公共函数和数据库连接脚本,各个漏洞模块的代码按功能拆在不同的子目录中。文件包含的练习模块位于专门的子目录里,包含两个主要PHP文件,一个负责页面展示,一个负责处理请求。

另外,配置文件里面的数据库连接信息也需要确认无误。靶场默认把连接参数集中在某个配置脚本中,如果你在安装时改了数据库密码,这里必须同步更新,否则页面能打开但数据读不出来,看起来像漏洞利用失败,实际上是环境没配好。

2.3 文件包含模块的入口长什么样

启动完成后,进入靶场首页,找到文件包含练习入口。页面很简单:一个下拉框,几个选项,比如“封面图模块”“内容模块”“头部模板”,点击确定后页面会显示对应的文件内容。

我第一次看到这个页面时,第一反应是“好眼熟”——这不就是很多CMS后台的模板选择功能吗?用户选一个模板名,系统加载对应模板文件。代码逻辑很可能长这样:

if (isset($_GET['filename'])) { include($_GET['filename']); } else { include 'template_default.php'; }

用户选择的模块名称会被直接当作文件路径进行包含。这个参数就是整个漏洞的核心,后续所有利用方式都围绕它展开。

我先在下拉框里正常选一个选项,确认页面功能正常,然后打开浏览器的开发者工具,观察URL的变化。通常选中下拉框后,页面会跳转到带有filename参数的URL。这个参数的值看起来很正常,比如template_default.php,但它允许用户手动修改。我直接在地址栏把它改成了其他路径,测试服务器会返回什么响应。

这一步操作就是整个通关过程的开端:从一个可控参数入手,观察服务器对异常输入的反应。

3. 本地文件包含通关实录:三条路径三种突破

3.1 利用目录穿越读取系统敏感文件

我的切入点是URL中的filename参数。先在地址栏尝试把参数值改成一个不存在的路径,比如test.php,页面提示文件不存在。这说明包含功能确实在按照用户提供的路径去找文件。继续把参数改为常见的系统配置文件路径,观察响应变化。

最经典的测试方式是用目录穿越。比如本来参数值是template_default.php,我尝试改成../../../../../../etc/passwd。这里的关键在于,每次../都会让路径解析向上退一级,连续多级穿越之后就能跳出靶场的Web目录,直达系统根目录,再拼接上etc/passwd就能读到系统用户信息。

推导一下这个路径的解析过程:起始路径可能是\var\www\html\inc\这类Web目录,从inc目录开始向上穿越,经过html、www、var,最终落到根目录/,再接上etc/passwd,等效于直接读取/etc/passwd。路径穿越的本质就是把相对路径一步步推回绝对路径。

当我提交修改后的URL时,页面输出的内容确实变了——不再是模板代码,而是一串包含用户名和登录信息的系统文件内容,例如root:x:0:0:root:/root:/bin/bash这样的记录。这就证明,本地文件包含漏洞成立,并且可以读取系统文件。

这里还要补充一个细节:实际测试时,路径穿越的层级并不固定。根目录到Web目录之间可能隔着1层,也可能隔着5层,直接写一个很深的多级穿越往往最省事,因为多余的路径层级会被系统直接忽略。只要最终路径解析能落到目标文件上,穿越就成功。

3.2 通过报错信息判断文件状态与目录结构

目录穿越成功之后,我意识到这个参数不仅能读文件,还能通过提交不存在的路径来触发错误信息。我把参数改成/etc/no_such_file这样的路径,页面果然报了错,错误信息中能看到包含失败的具体原因、当前脚本所在的路径位置,甚至PHP运行时的相关配置。

这一步的意义在于:利用报错信息可以快速确认服务器上的实际目录结构、文件系统权限以及PHP版本信息。虽然靶场环境里这些信息用处有限,但换到黑盒测试场景,这类细节往往决定了后续能否构造出准确有效的利用路径。

在实际练习中,我还会同时观察HTTP响应状态码。比如,读取不存在的文件返回404,读取存在但无权限的文件返回403或500,这些细微差异可以帮助判断目标文件的权限设置。

3.3 用php://filter伪协议读取PHP源码

读到了系统文件,接下来可以更进一步:读取靶场自身模块的PHP源码。直接的include会把PHP文件当作代码执行,页面只会显示运行结果,看不到原始代码。这时候需要借助PHP的伪协议php://filter。

构造的URL类似这样:

php://filter/read=convert.base64-encode/resource=目标文件

php://filter是PHP提供的一种流过滤器,它把后面的资源路径先经过过滤器处理,再进行流式读取。当过滤器指定为convert.base64-encode时,读取到的内容会被编码为Base64字符串输出。对于PHP文件来说,它不会被解析执行,而是原样输出为编码后的文本。

我将参数设置为读取靶场模块自身的PHP文件路径,页面输出的是一串较长的Base64字符串。复制到本地解码后,模块的完整源码清晰呈现——变量赋值、条件判断、数据库操作全都一览无余。文件包含漏洞在代码审计中的核心价值就在于此:它提供了源码级别的可见性,后续任何隐藏的逻辑问题都会暴露在眼前。

注意:不是所有PHP版本都支持所有伪协议。php://filter在PHP 5.0以上都能使用,大多数现代环境都没问题。但php://input、data://这类协议在某些配置下会被禁用,比如allow_url_include关闭时,php://input就不能用于包含操作。

通过这次源码读取,我对“文件包含漏洞的本质是可控路径传入”有了更深的理解。文件包含本身并不直接等于代码执行,但它能够触达的资源非常多:系统文件、源码文件、日志文件、会话文件、临时文件,每一个都可能成为下一步利用的跳板。

4. 远程文件包含通关实录:在靶场里模拟跨站加载

4.1 远程包含生效的两个前提条件

LFI走通后,我接着挑战RFI。与本地包含相比,远程文件包含对环境的依赖更多,主要前提有两个:一是PHP配置中allow_url_include必须为On,二是包含语句必须支持远程协议解析。

默认的PHP环境里,allow_url_include通常是关闭的,因为远程包含的风险太大——等于允许任何可控参数把外部代码拉进服务器执行。Pikachu靶场为了让学习者体验完整的RFI过程,要求手动打开这个选项。

修改方式不复杂:找到环境里的php.ini文件,把allow_url_include = Off改成On。改完后需要重启PHP服务或整个Web服务器才能生效。我改完后用phpinfo()页面确认配置生效,页面里清清楚楚显示allow_url_include为On,另一项相关配置allow_url_fopen默认是开着的,不用额外动。

还有一个值得注意的细节:远程包含支持的协议通常包括http://和https://,部分环境下还支持ftp://。做RFI练习时,用HTTP协议就够了,不必复杂化。

4.2 搭建一个最小化的远程文件源

要让远程包含生效,我需要一个能提供恶意文件的“远程服务器”。当然,不需要真的去申请一台独立服务器,在本机起一个临时HTTP服务,作为包含来源即可。

这里先定义一个最简单的PHP探测文件,内容是一行合法的PHP代码,例如:

<?php echo "remote_include_success"; ?>

我把这个文件放到某个目录下,然后启动一个轻量级的静态文件服务器,让它监听在本地某个端口上。这样一来,靶场服务器就可以通过HTTP协议访问到这个文件。

需要说明的是:在真实环境里,“远程服务器”和“靶场服务器”必须是互相能通信的两台机器,这样发起远程包含时才能获取到内容。在本机模拟时,本质是同一个机器上的两个服务互相访问,网络隔离的问题可以忽略,但逻辑流程完全一致。

4.3 构造远程包含的完整URL

先确认本机远程文件服务器能正常访问——在浏览器里直接输入远程文件的地址,能看到返回内容,说明服务没问题。然后把靶场包含模块的参数改为这个远程地址的完整URL,格式如http://127.0.0.1:8888/remote_test.php。

点击提交后,页面上出现了remote_include_success这样一段输出,远程包含宣告成功。这说明靶场服务器真的跨网络加载了外部文件,并把文件内容解析执行了。

RFI的影响范围明显比LFI大得多。LFI在上限位。最直观的差异是:LFI无论如何都只能读取服务器上已经存在的文件,很难做到代码执行;而RFI直接把攻击者指定的代码赋予了目标服务器的执行权限。当然,在靶场里这段代码只是输出一行字符串,但在真实环境里,这段代码可以是任意逻辑。

在这里必须额外提醒:RFI练习完成后,一定要把allow_url_include改回默认的关闭状态。我见过不少朋友练完之后忘记恢复配置,靶场的Web入口长期处于“门锁不上”的状态,后续再去学习其他模块,安全问题的边界会被严重混淆。

4.4 远程包含与本地包含的利用差异对照

我把两种包含方式的利用思路整理成了一张对比表,方便复习时快速回看:

维度本地文件包含远程文件包含
利用前提可控参数加可读文件可控参数加远程包含开关加网络可达
主要目标读取敏感文件、源码、日志直接执行外部代码
影响程度信息泄露与二次利用近似代码执行
典型手段目录穿越、伪协议外部URL加载
学习难度入门级需要先掌握外部服务搭建

这张表适合贴在笔记里。学完这个模块之后,我每次看到代码里出现include、require这类函数,都会条件反射地检查参数的传递链路是否可控、是否经过过滤、是否被限制在允许范围内。这种条件反射不是一朝一夕养成的,但靶场练习是最好的训练场。

5. 进阶利用思路:日志包含、会话包含与伪协议组合

5.1 利用访问日志充当代码投递箱

LFI能读文件,但如果找不到一个包含可执行代码的文件,读取到的内容再敏感也只是信息泄露,无法形成进一步利用。这时很多有经验的人会想到日志文件——因为日志内容往往可以受到用户输入影响,如果能在日志里写入PHP代码,再通过LFI把它包含进来,就等于变相让服务器执行了我们的代码。

靶场环境一般自带Web服务器访问日志。我试着在构造请求时,把User-Agent头改写成一段简单的PHP探测代码,比如<?php echo "logs_include_test"; ?>,然后正常访问靶场页面。服务器会把这次请求连同UA头一起记录到访问日志里。

接着把包含参数指向访问日志的绝对路径。页面果然输出了logs_include_test,说明日志中被记录的PHP代码被执行了。

不过这个思路在真实利用时稳定性不如靶场里理想:日志文件通常体积较大,包含时容易触发内存或语法报错;部分环境存在日志轮转规则,路径不固定;现代服务器日志里,特殊字符有时会被转义,导致代码无法执行。靶场练习时,先确认日志路径、确认UA写入格式没有问题,再动手细测。

5.2 会话文件包含的基本思路

另一种常见的包含思路是包含会话文件。PHP默认把会话数据存储在临时目录里,文件名格式通常是sess_加会话ID。如果应用本身会把用户名、用户编号这类输入存进会话变量,那么攻击者可以把恶意代码通过可控输入写入会话,再通过LFI包含这个文件来触发执行。

这个思路在靶场里也可以实验,但我个人的建议是:先把原理吃透就好,不必急着在靶场里完整重复整个流程。会话文件的路径和存储格式受PHP版本以及session配置影响较大,稍微改一个配置,路径就会发生变化。初学者先掌握思路,等真正需要时再回头动手,性价比更高。

5.3 伪协议的组合使用与环境限制

前面用过php://filter读取源码,这是最基础、也最不容易出问题的伪协议利用。除了它,data://伪协议也值得了解——它允许在URL中直接放入完整的数据流。比如,可以在URL里构造一段包含PHP代码的数据,直接作为包含目标。

data://能否生效,关键取决于PHP配置里的allow_url_include。如果这个开关是打开的,data://text/plain,<?php ... ?>这种形式就能触发执行。我在靶场中打开开关后测试过一次,效果确实很直接——不需要外部服务器,一条URL就能完成测试。

但要注意,现代PHP版本对data://等伪协议的安全限制收紧了,很多环境下即使开启了远程包含,也会在某些条件下拒绝这类用法。遇到这种情况时,不必死磕同一个协议,换成日志包含或外部URL,往往更容易见效。

利用手段从来不是越多越好,关键是理解每种手段背后的前提条件,再根据目标环境做选择。这一层理解,比机械地背诵多个Payload要有价值得多。

6. 避坑指南:我踩过的那些坑,你完全可以绕开

6.1 环境配置层面的常见问题

首先是数据库连接失败。页面上能打开,但一提交数据就报数据库错误,这种一般是没有修改靶场配置脚本中的数据库账号密码,或者SQL文件没有完整导入。检查顺序建议是:配置文件、数据库服务是否启动、数据表是否完整。

其次是中文乱码。创建数据库时使用默认字符集,而后台页面和应用代码用的是另一种编码,就会导致中文显示异常。建议在创建数据库时明确指定与应用一致的字符集,不要图省事。

再其次是页面报“未定义函数”。这通常是PHP版本太新或太旧,部分旧代码调用了不兼容的函数。建议使用比较稳定的版本,不要直接用最新版,也不要停留在过于老旧的版本。

6.2 利用过程的现象坑

读取php://filter的时候,有时候页面返回空白。这种情况多数是路径拼写错了,或者目标文件根本不存在。我建议先用目录穿越测试目录文件确实存在,再切换为伪协议读取。

远程包含没有按预期生效,多半是allow_url_include没有真正打开。改完php.ini后记得重启服务,再回到phpinfo()页面确认配置项实际值,而不是只看文件里的开关注释。

做日志包含时页面卡住或直接报错,很可能是日志文件太大,PHP进程内存吃紧。可以先备份日志,把当前日志清空,只保留必要记录再测试。

6.3 容易误判的场景

功能正常不代表没有漏洞。页面上看不出异常,下拉框选什么都能正常显示,这恰恰可能说明参数被完全信任。安全测试不能只看功能是否正常,还要看输入是否被严格校验。

报错信息也可能是漏洞的旁证。有些环境里显式报错被关闭了,但日志文件里仍会记录详细信息。不要因为页面没有反馈就认为目标“没毛病”,响应头、服务器日志都值得多看一眼。

伪协议利用失败也不等于PHP完全不支持。有可能只是某个特定伪协议被配置限制了。用phpinfo()查看详细配置状态,再决定下一步用什么方案。

7. 修复与防御:从攻防两端审视文件包含

7.1 最稳妥的修复方案:白名单机制

聊了这么多利用方式,还是需要回到开发视角回答一个问题:如何在一开始就避免这类漏洞?

最推荐的是白名单机制。与其费力过滤黑名单路径,不如直接限制允许加载的文件范围。在入口处定义一个合法的文件映射表,用户传入的参数只能是映射表的键,而不是一个可随意的完整路径。

$allowed = [ 'home' => 'pages/home.php', 'about' => 'pages/about.php', 'contact' => 'pages/contact.php', ]; $page = $allowed[$_GET['page']] ?? 'pages/home.php'; include($page);

这段代码的核心是:用户输入一个短键名,程序只在预定义数组里根据这个键名挑选对应的文件路径,路径本身完全由代码决定,用户无法直接操控。无论用户传的是../../../../etc/passwd还是http://外部地址,最终都只会影响查询的键名。就像菜单上只有三种菜,你说“来一只烤全羊”,答案只会是“没有这道菜”。

7.2 服务器与代码层面的加固组合

除了白名单方案,代码中还可以加一些辅助校验,比如禁止路径中出现../或空字节,禁止以http://等协议开头。不过这类过滤本质上还是黑名单思维,难免有覆盖不到的情况,只适合作为辅助手段,不要当作唯一防线。

服务器层面有一个优先级很高的配置原则:如果业务确实不需要远程文件包含,就保持PHP配置allow_url_include为Off。仅仅这一项配置,就能拦截绝大部分RFI攻击。

同时,Web目录权限也需要警惕。运行用户只授予Web目录必要的最小读写权限,系统文件目录不开放写权限。日志文件因为需要写入,尽量放到Web目录之外,避免被直接通过URL访问到。

运行环境如果支持,还可以让Web服务以低权限用户运行,并配合文件系统层面的访问控制。深挖下来,其实每个基础加固都能为最终安全加分,叠加起来效果才明显。

7.3 定期代码审计与自动化检查

另一个容易被忽视的隐患点在于,代码是会持续演变的。建议把文件包含相关函数列入每次代码审计的必检项。重构前后,统一搜索include、include_once、require、require_once这四类函数的调用位置,确认参数来源是否可控。

如果有自动化的CI流程,可以加一条简单的静态扫描规则:只要发现上述函数的参数包含来自用户输入或请求参数的变量,就自动标记为待人工复核。这个做法看起来琐碎,但确实能提前拦住不少问题。

真实环境里,漏洞往往不是单点失误造成的,而是多个本可以避免的基础问题在同一段逻辑里叠加了。文件包含这类漏洞尤其如此,参数没有白名单、PHP配置开放了远程支持、日志位置过于暴露,三者凑齐才会形成一击致命的链条。

8. 写在最后:一点个人体会

Pikachu靶场文件包含模块全部练下来,我最大的感受是:这类漏洞本身并不复杂,真正复杂的是能不能快速判断“一段输入是否会被带进文件路径”。很多时候代码读着读着就能明白,难的是面对一个完全陌生的项目时,如何快速定位可疑参数,如何用最小代价确认漏洞存在,如何在多种利用思路里找到可用的那一条。这些能力没有捷径,只能靠大量练习慢慢积累感觉。

最后分享一个小技巧:做靶场练习时,建议每一步都在笔记里记下“输入、输出、原因”这三项。比如,输入了什么URL,页面输出了什么,为什么会这样。回头复习或者写技术报告时,这些笔记能帮你快速重建当时的思路,也不会遗漏环境配置类问题。这比单纯“一遍打通”更有价值——因为通关本身只是目的,背后的分析方法和记录习惯,才是能带到真实问题里的东西。

练完这一模块后,别忘了把靶场环境里打开的远程包含开关恢复默认,顺便检查一下本机PHP配置是否还有其他不合规的选项。这也是学习的一部分。

相关新闻

【例 2】北极通讯网络(信息学奥赛一本通- P1487)

【例 2】北极通讯网络(信息学奥赛一本通- P1487)

【题目描述】原题来自&#xff1a;Waterloo University 2002北极的某区域共有 n 座村庄&#xff0c;每座村庄的坐标用一对整数 (x,y) 表示。为了加强联系&#xff0c;决定在村庄之间建立通讯网络。通讯工具可以是无线电收发机&#xff0c;也可以是卫星设备。所有的村庄都可以拥…

2026/10/21 6:07:27 阅读更多 →
STM32F411标准例程模板:从工程搭建到外设驱动开发实战

STM32F411标准例程模板:从工程搭建到外设驱动开发实战

简介&#xff1a;面向 STM32F411 开发者的一份标准例程模板&#xff0c;基于 ARM Cortex-M4 内核&#xff0c;涵盖启动代码、HAL 库、系统时钟配置、主函数框架及 LED/串口/定时器等外设示例&#xff0c;适合快速搭建项目并学习片上外设用法。压缩包 5.47MB&#xff0c;共 212 …

2026/10/21 6:07:27 阅读更多 →
HTTP实战笔记:从协议底层逻辑到线上问题排查的工程指南

HTTP实战笔记:从协议底层逻辑到线上问题排查的工程指南

1. 为什么值得重新聊一聊 HTTP做后端开发或者前端联调时间长了&#xff0c;你会发现一个现象&#xff1a;很多人对 HTTP 的理解停留在“请求-响应”“GET 和 POST 的区别”这个层面&#xff0c;一旦遇到线上问题——比如接口偶发超时、浏览器缓存不生效、跨域预检请求莫名多了一…

2026/10/21 6:06:26 阅读更多 →

最新新闻

Linux网络学习【传输层协议UDP】

Linux网络学习【传输层协议UDP】

&#x1f525;承渊政道&#xff1a;个人主页 ❄️个人专栏: 《C语言基础语法知识》 《数据结构与算法》 《C知识内容》 《Linux系统与网络知识》 《算法刷题指南》 《测评文章活动推广》 《大模型语言路线学习》 《MySQL数据库学习》 《Python知识内容》 《cpolar知识学习》 ✨…

2026/10/21 6:58:46 阅读更多 →
AI大模型落地最后一公里:收藏这份FDE工程师成长指南,小白程序员必看!

AI大模型落地最后一公里:收藏这份FDE工程师成长指南,小白程序员必看!

工业AI项目常卡在POC阶段&#xff0c;难以规模化落地。核心问题在于通用AI能力与千差万别的工业现场之间存在数据、设备、工况、业务流程等多重鸿沟。为填补这一空白&#xff0c;新职业“前线部署工程师”&#xff08;FDE&#xff09;应运而生。FDE是介于算法工程师与现场实施工…

2026/10/21 6:58:46 阅读更多 →
AIPM 是什么?

AIPM 是什么?

搜「AIPM」&#xff0c;你会同时撞见四种答案&#xff0c;它们互相不承认对方&#xff1a;岗位缩写、培训结业证、老认证的 AI 加课版、以及带公开能力模型与独立考试的标准化认证。 本文做三件事&#xff1a;拆开这个词的四种用法&#xff0c;给出两套可对照的参数表&#xff…

2026/10/21 6:58:46 阅读更多 →
CST有哪些典型应用场景?从天线设计到医疗成像,看电磁仿真如何走进真实研发

CST有哪些典型应用场景?从天线设计到医疗成像,看电磁仿真如何走进真实研发

当产品越来越智能、系统越来越复杂&#xff0c;电磁问题也不再只属于某一个专业环节。它可能出现在天线布局阶段&#xff0c;也可能暴露在EMC整改现场&#xff1b;可能影响高速互联链路的稳定性&#xff0c;也可能关系到人体暴露评估、医疗成像效果&#xff0c;甚至高端装备的隐…

2026/10/21 6:58:46 阅读更多 →
火炮周视瞄准镜初步设计:指标分解、光路构型与轴系精度校核

火炮周视瞄准镜初步设计:指标分解、光路构型与轴系精度校核

简介&#xff1a;这份文档面向兵器工程、光学仪器及火炮瞄准系统方向的学生与设计人员&#xff0c;围绕火炮周视瞄准镜的初步设计展开&#xff0c;解决从光学参数确定到系统结构选型的完整设计流程问题。资源包共1个doc文件&#xff0c;约395KB&#xff0c;内容为一份结构完整的…

2026/10/21 6:58:46 阅读更多 →
Linux僵尸、孤儿与守护进程:原理、区别与实战实现

Linux僵尸、孤儿与守护进程:原理、区别与实战实现

1. 项目概述&#xff1a;从“进程尸体”到“后台幽灵”的真实世界映射在 Linux 系统里&#xff0c;你执行ps aux | grep defunct时看到的<defunct>标记&#xff0c;不是报错&#xff0c;而是一具“进程尸体”——它已经死亡&#xff0c;却还没被收尸&#xff1b;你用nohu…

2026/10/21 6:57:46 阅读更多 →

日新闻

统一内存+量化:锐龙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 阅读更多 →