共计 2825 个字符,预计需要花费 8 分钟才能阅读完成。
深夜,一场噩梦将我惊醒,冷汗浸透全身。梦中,我被成千上万愤怒的人群追赶,他们高举着笔记本电脑,像挥舞棍棒一样朝我砸来。愤怒的根源?隐私被破坏。这场梦或许是我潜意识在试图传达某种信息。考虑到即将开始的工作,我清楚地知道那个黑暗夜晚的大脑在警告什么: 不要让 AI 为你编写代码。
这并非夸张。我正准备启动一个编码项目,计划使用 AI 协助完成。但与那些关于 vibe coding 的故事不同,那些故事中有人通过 12 天的无代码提示练习制作了一个 Pinterest 克隆,而我的任务是对全球超过 20,000 个网站使用的关键任务代码进行深度架构更改,以提供访问安全性和网站隐私。
如果发布损坏的代码,最好的情况是破坏一堆网站。最坏的情况是将这些私有网站的内容暴露在公共互联网上。人们使用代码创建受保护的私有网站,不希望与整个互联网共享。用户可以指定特定的家庭成员、同学和 / 或教师登录。开发者还使用代码锁定正在进行的项目,用户在登录页面后设置私有测试站点,非常适合发布受限访问的预览站点供客户审查和使用。
所有这些站点的核心是一系列设置记录。这些记录捕获了每个站点所有者希望如何配置其隐私。包括要设为私有或公开的页面列表、用于相同目的的标签和类别,以及各种其他站点特定的隐私设置。
当前设置保存为称为序列化数组的内容。序列化是一种将大块结构化数据存储在数据库字段中的方式。但问题不在于序列化过程,而在于反序列化过程,即数据被重新组合以供代码使用。
大多数情况下,每当 WordPress 保存或更新设置值时,序列化都会在幕后进行。这是一种完全安全的设置管理机制。然而,现有代码中有一些地方不必要地显式进行序列化和反序列化。
问题是 unserialize() 几乎可以重新组合任何内容,包括恶意逻辑。这被称为 PHP 对象注入 。使用 unserialize() 可能会加剧此漏洞。代码已经进行了一些检查以防止恶意行为,但在某些地方,代码自行进行序列化 / 反序列化过程,这打开了一个轻微的风险向量。
需要注意的是,只有在系统中已安装的现有插件或主题存在漏洞和利用时,才会发生此漏洞。使用漏洞扫描程序进行的测试从未在代码中识别出此类漏洞,但我宁愿安全也不要后悔。
我希望更新代码,简单地删除少数不必要的手动编码序列化使用。这是一个相当直接的过程,涉及读取旧设置数据,将其更新为新格式,然后将其保存回数据库。
然而,事实并非如此简单。
在进行此更改时需要考虑很多因素。首先,当然是有 20,000 个站点使用这些设置。任何更改都必须稳健、冗余、可恢复且相当透明。
必须具有某种迁移前备份过程和故障恢复过程。无论设置以何种顺序访问和保存,都必须正常工作。每个更新、检查和重新保存的设置必须在 12,000 多行代码中进行转换。
需要识别、测试边缘条件并将其纳入代码中,以确保没有站点失败。必须在设置数据中添加某种级别的版本管理,以便代码的较新版本知道要转换的内容,而其他站点上的较旧版本的代码不会中断。
这是一项庞大的工作。这不是从零开始并使用 AI 制作某种漂亮的站点。这是在现有安装中修改代码,并确保每个站点都能安全更新。
在考虑修改设置代码以删除所关注的项目之前,我询问了 GPT-5 思考模式深度研究 、OpenAI Codex、Google Jules 以及 GPT-5 深度研究的轻量版 。
最后一个 AI 被使用,因为显然超过了限制,因此深度研究查询导致了以下消息:“剩余的查询由轻量版的深度研究提供支持。我们的完全访问权限将在周六重置。升级到 ChatGPT Pro 以继续使用深度研究。”由于需要等待一周才能恢复完整的深度研究 AI,我决定在轻量版中重新运行查询,看看它会做什么。
OpenAI Codex 和 Google Jules 都敷衍了事。Codex 提供了一个简短的设置值列表。Jules 提供了四个短段落,基本上说代码请求并从数据库接收值。这两个答案都没有给人留下深刻印象。
在 GPT-5 深度研究降级之前,我获得了一份 13 页的文档,解释了设置代码中使用的每个机制、每个字段和每个选项。老实说,这几乎让人不知所措。它清晰而全面,但几乎太完整了。它以与主要概念相同的优先级呈现了最深入的细节,使得很难真正了解操作的全貌。
轻量版的深度研究提供了所谓的“金发姑娘”版本。它恰到好处。它呈现了高阶架构并提到了微小细节,但没有被它们分散注意力。我发现它非常有用。
我的意图是让 AI 编写此设置修复代码。在深度研究降级到轻量版之前,我一直使用其完全功能。
当时,我希望深度研究制定一个更改计划,然后将该计划提供给 Codex 或 Jules。Jules 以制定任何编码任务的行动计划而闻名,但鉴于它最初分析提供的很少,我不确定它是否能够考虑所有必要的影响和阶段。
在深度研究降级之前,我下载了上述略微令人不知所措的 13 页“设置如何工作”详细文档。将其传递给一个新会话。
我的想法是让一个 AI 会话分析现有代码,然后让一个完全不同的 AI 会话将该分析用于规划实际的修改过程。
这次我要求它制定一个启动升级的计划。我给出了一个非常详细的提示(回想起来,可能过于详细),并要求它创建一个产品需求文档 (PRD),可以将其提供给 Jules 或 Codex。
它返回了一份 11 页的文档,包含以下部分:,
- 背景和目标
- 前后数据结构
- 迁移策略(带版本跟踪和故障转移)
- 插件互操作性和部分升级处理
- 设置管理库 API 设计
- 边缘情况和回滚策略
- 插件互操作性和部分升级处理
- 设置管理库 API 设计
- 边缘情况和回滚策略
- 部署注意事项
- 给 Codex/Jules 的开发人员笔记
注意到列表中的某些内容吗?有些地方不对劲。继续看,你会发现。
是的,它重复了三个部分。插件互操作、设置管理和边缘情况被重复了两次。
现在,看看。我自己曾犯过剪切和粘贴并在两个地方留下一些内容的错误,但我不是 AI。我也没有被“面试”修改关键任务代码的工作。
是的,毫无疑问我可以删除重复的部分,仍然将 PRD 提供给 Jules 或 Codex。但演示错误让人毛骨悚然。那份 PRD 是一个巨型代码更改的指令集。还有什么问题?可能遗漏了什么?
毕竟,当我编码时,我一次只做一个小功能。我测试每一行,关注每一个细节,并痴迷于每一个更改。但这是一份理论上可以橡皮图章并委托给云端某种伪智能的大文档。
在做出决定之前,我对此进行了深入思考。
让 AI 添加新功能或从头开始构建某些东西我相当自在。但深入关键任务代码的核心?我还没准备好放弃控制权。
负面影响可能太灾难性。如果 AI 在代码中失控,我甚至可能无法弄清楚出了什么问题。当然,我可以回滚到将任务委托给 AI 之前的状态,但为什么要冒这个险?
我希望有更精细的控制。我乐意让 AI 帮助编写特定例程,为有良好文档的接口编写代码,并添加一些新的非关键功能。
但当涉及到核心功能和可能将挥舞火把、挥舞笔记本电脑、愤怒的站点运营者的噩梦变为现实的事情时,我认为还是自己编写代码。
敬请期待。我将使用 AI 编写代码。并会讲述。但我不会让 AI 在可能造成如此大损害的地方自由发挥,收益却如此之小。