[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fvoAnFRql4kplUbYG8nVIQSWxe5K6bdMfko60QnyMHTA":3},{"item":4,"related":51},{"id":5,"type":6,"title":7,"slug":8,"summary":9,"body":10,"coverUrl":11,"productScreenshots":12,"productLinks":13,"authorName":14,"authorUrl":15,"authorSubject":16,"category":17,"tags":22,"sourceLabel":39,"sourceName":40,"sourceUrl":41,"status":42,"seoTitle":43,"seoDescription":44,"canonicalUrl":45,"isFeatured":46,"sno":47,"sortOrder":48,"publishedAt":49,"updatedAt":50,"createdAt":50},"c85be666-a2ac-481a-a233-1d9aa7c5bfa1","article","AI 为什么会推荐不存在的 npm 包？","ai-hallucinated-dependencies-supply-chain","AI 可能把不存在或过时的依赖说得很像真的，甚至让开发者把陌生包安装进项目。本文解释依赖幻觉、恶意抢注、版本风险和安装前的供应链检查。","AI 编程最容易让人放松警惕的地方，是它经常把不存在的依赖说得很像真的。模型可能推荐一个听起来合理的包名，给出安装命令和示例代码，开发者复制运行后却把一个陌生依赖引入了项目。如果攻击者提前注册这个名称，所谓的“便捷安装”就可能变成供应链入口。\n\n## 依赖幻觉是怎么发生的\n\n模型学习过大量代码和文档，但它并不总能实时确认包管理器里是否存在某个包，也不一定知道哪个版本仍然维护。它会把相似的库名、旧版本名称和开发者常见的命名方式拼接起来，生成一条语法看起来完整的建议。\n\n这类错误和普通代码 Bug 不一样。代码写错了，运行时可能马上报错；包名写错了，如果有人恰好注册了同名恶意包，安装过程就可能执行脚本、读取环境变量或修改构建环境。\n\n## 安装前至少确认五件事\n\n第一，在对应的官方包仓库搜索包名，不要只相信模型提供的链接。第二，确认发布者、维护历史、版本时间和下载情况。第三，阅读安装脚本和依赖树，关注是否有不必要的网络或文件操作。第四，检查许可证和已知漏洞。第五，确认它解决的问题没有现成的官方库或项目内部工具可以承担。\n\n包名真实存在，也不代表当前版本安全。AI 可能推荐一个历史上常见、现在却已经过时的版本。依赖版本应该通过锁文件、更新工具和安全数据库管理，不应每次让模型随意决定。\n\n## 把依赖检查变成自动门槛\n\n个人项目至少可以在安装前手动检查包名，在提交前运行审计工具，并锁定版本。团队项目则可以维护允许使用的包清单，限制新依赖的最小年龄，要求 Pull Request 说明引入原因，并让 CI 检查已知漏洞和许可证。\n\n给 AI 的任务也应明确：“不要自动安装新依赖；若必须增加，请先列出包的官方地址、维护者、版本、许可证、已知漏洞和替代方案，等待确认后再执行。”这会让模型从“找一个能用的包”转向“提供可审查的选择”。\n\n## 不要误以为 `.gitignore` 能保护秘密\n\n很多 AI 工具可以直接读取文件系统，而不是只读取 Git 已跟踪文件。`.gitignore` 能阻止文件被提交，却不一定阻止工具看到 `.env`、私钥或本地配置。敏感文件需要通过工具自身的排除规则、沙箱路径和权限控制保护。\n\n同样，依赖风险也不能只靠“模型不会恶意”。模型可能不具备最新安全信息，工具也可能被恶意上下文诱导。把包验证、依赖扫描和网络限制放进工程流程，才不会把安全寄托在一次生成的运气上。\n\n## 一条容易记住的原则\n\nAI 推荐的包名只能算线索，不能算事实；AI 推荐的版本只能算候选，不能算批准。安装任何新依赖前，先确认它存在、有人维护、来源可信、风险可接受，再让它进入项目。\n\n## 来源\n\n- [OWASP：Secure Coding with AI Cheat Sheet](https:\u002F\u002Fcheatsheetseries.owasp.org\u002Fcheatsheets\u002FSecure_Coding_with_AI_Cheat_Sheet.html)\n- [GitHub：使用 GHAS 保护 AI 编程 Agent](https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcode-security\u002Fhow-tos\u002Fuse-ghas-with-ai-coding-agents)","\u002Fuploads\u002F2026-09-14\u002F21c507cf-18e5-4b18-b71a-a501f6fb85c0.jpg",[],[],"Foundit","https:\u002F\u002Ffoundit.cn","foundit-ai-editorial",{"id":18,"name":19,"slug":20,"description":21},"6179d3b6-dc34-4483-9ded-3cd9f1b37a47","科普","abbreviation","介绍各领域新兴概念",[23,27,31,35],{"id":24,"name":25,"slug":26},"0848beb4-db26-4fb8-b391-f852a11be192","AI编程","ai-coding",{"id":28,"name":29,"slug":30},"7c76bfc2-f80f-4ee0-a95d-27bd8708b434","技术","slug",{"id":32,"name":33,"slug":34},"a202d639-99a6-488a-a712-4d4c6ffd7e15","开发","dev",{"id":36,"name":37,"slug":38},"4c2bbea6-eab7-40a8-8447-1de478ff7749","分析","analyse","OWASP 官方安全指南","Secure Coding with AI Cheat Sheet","https:\u002F\u002Fcheatsheetseries.owasp.org\u002Fcheatsheets\u002FSecure_Coding_with_AI_Cheat_Sheet.html","published","AI 依赖幻觉：不存在的 npm 包如何变成供应链风险","解释 AI 推荐不存在依赖的原因，以及包名验证、维护历史、漏洞扫描和最小权限如何降低软件供应链风险。",null,false,41,0,"2026-09-14T00:00:00.000Z","2026-09-14T11:00:01.589Z",[52,60,70],{"id":53,"type":6,"title":54,"slug":55,"summary":56,"coverUrl":57,"authorName":14,"sno":58,"publishedAt":49,"createdAt":59},"3225813f-51a8-40ca-9ad2-98ce781298be","AI 编程 Agent 的循环是怎么跑起来的？","ai-coding-agent-loop-tools-tests-fix","AI 编程 Agent 并不是一次性写出答案，而是在读取上下文、调用工具、运行测试和修复错误之间反复循环。本文拆解模型与 Harness 的分工，以及 Agent 为什么会重复犯错。","\u002Fuploads\u002F2026-09-14\u002Fd70c81c2-a6ff-4c9e-b216-cc1a14d6fa6d.jpg",48,"2026-09-14T10:59:57.238Z",{"id":61,"type":6,"title":62,"slug":63,"summary":64,"coverUrl":65,"authorName":66,"sno":67,"publishedAt":68,"createdAt":69},"969a6246-646c-424b-9693-af4b2a1ea01d","Agent 记忆机制：短期、长期与情景记忆怎么配合才不「转头就忘」","agent-memory-short-long-episodic","只靠上下文窗口的 AI 总会忘。本文讲清 Agent 的三类记忆（短期\u002F长期语义\u002F情景）与一套「检索注入 + 写回」的读写机制，给出向量记忆最小示例，以及记太多变噪声、遗忘权等边界。","https:\u002F\u002Foxqtewbrpuiouqqjrvdv.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fpublic-media\u002F2026-07-20\u002F0d047e5d-2518-4d5b-bef9-94fc23fd4fa7.jpg","Foundit AI",70,"2026-07-09T00:00:00.000Z","2026-07-20T01:13:03.202Z",{"id":71,"type":6,"title":72,"slug":73,"summary":74,"coverUrl":75,"authorName":66,"sno":76,"publishedAt":77,"createdAt":78},"a4e24259-9408-48df-a0a5-544d530ea01e","致命三件套：AI开发的安全红线","ai-agent-lethal-trifecta-security","本文介绍 Simon Willison 提出的「致命三件套」——私有数据、不可信内容、对外通信，三者齐备就构成可被提示注入利用的攻击链，以及如何从架构上拆掉它。","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1555949963-aa79dcee981c?w=1200",72,"2026-07-19T00:00:00.000Z","2026-07-19T17:10:41.826Z"]