ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

编程代理生成核心代码的四大安全盲区与工程实践策略

编程代理生成核心代码的四大安全盲区与工程实践策略 1. 编程代理的崛起与核心代码的边界问题1.1 从补全工具到代理式编程的跃迁过去两年编程辅助工具的形态发生了根本性变化。早期的代码补全工具只做一件事根据当前光标位置的上下文预测接下来可能要输入的几行代码。这类工具的本质是“高级输入法”它不关心你的项目结构不关心模块之间的依赖关系更不会主动去修改你已有的代码逻辑。但从2024年开始情况变了。以Claude Code、Cursor Agent、Devin、GitHub Copilot Workspace为代表的编程代理Coding Agent开始进入一线开发者的日常工作流。它们不再只是补全几行代码而是能够理解整个代码仓库的结构自主规划任务步骤跨文件修改代码运行测试甚至根据报错信息自动迭代修复。这种能力跃迁带来的效率提升是肉眼可见的——原本需要半天才能完成的模块重构代理可能在十几分钟内就能给出可运行的版本。我自己的团队从去年下半年开始深度使用编程代理最初确实被它的效率震撼到了。一个典型的场景是我们需要给一个老项目的API层增加一套新的鉴权中间件涉及路由配置、中间件注册、错误处理、单元测试四个层面的改动。以前这种任务至少要一个人半天的时间代理用了不到二十分钟就给出了完整的改动方案而且测试全部通过。但问题也随之而来。当我们把越来越多的核心代码交给代理去处理时一些让人后背发凉的安全隐患开始浮出水面。1.2 什么是“核心代码”为什么它不能随便交给代理在讨论安全盲区之前有必要先界定一下我说的“核心代码”到底指什么。不同团队对核心代码的定义可能不同但通常包含以下几类鉴权与授权逻辑用户身份验证、权限校验、会话管理、Token签发与验证等。这部分代码一旦有漏洞整个系统的安全防线就形同虚设。支付与交易流程订单创建、金额计算、支付回调处理、退款逻辑等。任何一个小数点精度的错误或者边界条件遗漏都可能造成直接的资金损失。数据加密与密钥管理加解密算法的实现、密钥的生成与轮换、敏感数据的脱敏处理等。业务核心算法推荐系统的排序逻辑、风控系统的评分模型、定价策略的计算公式等。这些算法往往是团队的核心竞争力所在。基础设施配置数据库连接池配置、缓存策略、消息队列的消费逻辑、限流与熔断规则等。这些代码的共同特点是出错代价极高且很多安全问题在功能测试阶段不会被发现。一个鉴权中间件如果漏掉了某个边界条件功能测试可能全部通过但攻击者可以利用这个漏洞绕过整个权限体系。一个支付金额的计算如果用了浮点数而不是定点数在大多数测试用例下结果都是正确的但在特定金额组合下会产生精度丢失。编程代理在处理这类代码时它的训练数据中大量存在的“功能正确但安全不正确”的代码模式会被它当作“最佳实践”来复用。这就是问题的根源。1.3 四大主流编程代理的共性盲区是怎么被发现的我们团队在过去三个月里做了一个系统性的测试把同一批核心代码任务分别交给四个主流编程代理去完成然后由安全团队的同事进行代码审计。测试的任务包括实现一个JWT鉴权中间件、写一个支付金额计算模块、实现一套基于角色的权限校验逻辑、以及配置一个带限流功能的API网关。结果让人相当不安。四个代理在功能层面都完成得不错测试用例基本都能通过。但在安全审计环节每一个代理生成的代码都发现了至少一个中高危的安全问题。而且这些问题呈现出明显的共性特征——不是某个代理独有的bug而是四个代理都会犯的同类错误。这些共性盲区包括对边界条件的处理不够严谨、倾向于使用训练数据中常见的“简化写法”而忽略安全加固、在涉及加密和随机数的场景中选择了不安全的API、以及在错误处理中泄露了敏感信息。下面我会逐一拆解这些盲区的具体表现和背后的原因。2. 四大共性安全盲区的深度拆解2.1 盲区一边界条件与异常路径的系统性忽视这是四个代理全部中招的第一个盲区也是最容易被忽视的一个。编程代理在生成代码时它的注意力主要集中在“正常路径”上——也就是输入合法、流程顺畅的情况下代码应该怎么走。对于异常路径和边界条件它的处理往往非常草率。我拿一个具体的例子来说明。我们让四个代理分别实现一个“根据用户ID查询订单列表”的API接口要求包含分页功能。四个代理生成的代码在正常路径上都没问题接收page和pageSize参数计算offset查询数据库返回结果。但当我们把pageSize设为0或者负数时问题就出现了。两个代理直接返回了空列表没有报错。一个代理返回了全部订单因为offset计算成了负数数据库把它当成了0。还有一个代理直接抛出了未捕获的异常把数据库的错误信息暴露在了API响应里。注意分页参数的边界校验看起来是个小问题但在实际生产环境中攻击者可以通过传入极端的pageSize值来实施拒绝服务攻击或者通过负数offset来绕过某些基于分页的数据过滤逻辑。这个盲区的根源在于代理的训练数据。GitHub上大量的开源代码在分页处理上就是很随意的很多项目只做了最基本的参数校验甚至完全不校验。代理从这些代码中学到的“模式”就是分页参数不需要严格校验。但作为核心代码这种随意的处理方式是不可接受的。更深层的问题是代理缺乏“防御性编程”的意识。它在生成代码时的目标是“让功能跑通”而不是“让代码在各种恶意输入下都安全”。这个差异在普通业务代码中可能影响不大但在核心代码中就是致命的。2.2 盲区二加密与随机数场景的不安全API选择第二个盲区集中在加密相关的代码上。当我们让代理实现“生成API密钥”或“创建会话Token”这类功能时四个代理中有三个选择了不安全的随机数生成方式。具体来说在Python环境下两个代理使用了random模块而不是secrets模块来生成Token。在JavaScript环境下一个代理使用了Math.random()来生成会话ID。这些API生成的随机数都是伪随机的种子可预测在安全场景下绝对不能使用。代理选择这些API的原因很简单训练数据中大量的示例代码就是用random或Math.random()来做演示的。这些示例代码的语境通常是“生成一个测试用的随机字符串”而不是“生成一个用于安全认证的密钥”。代理没有区分这两种语境的能力它只是学到了“生成随机字符串就用这个API”的模式。类似的问题还出现在哈希算法的选择上。当我们要求代理实现“用户密码存储”功能时一个代理使用了MD5两个代理使用了SHA-256但没有加盐只有一个代理正确地使用了bcrypt。MD5和未加盐的SHA-256在密码存储场景下都是不安全的这是安全领域的基本常识但代理显然没有把这个常识内化为代码生成的约束条件。场景代理常见选择安全选择风险等级生成会话Tokenrandom / Math.randomsecrets / crypto.randomBytes高密码哈希MD5 / SHA-256bcrypt / argon2高对称加密AES-ECBAES-GCM中高密钥派生直接截取PBKDF2 / scrypt中这张表里的每一个“代理常见选择”都是我们在实际测试中真实观察到的。而且这不是某一个代理的问题是四个代理在不同程度上都存在的倾向。2.3 盲区三错误处理中的信息泄露第三个盲区是错误处理。编程代理在生成错误处理代码时倾向于把详细的错误信息直接返回给调用方包括堆栈信息、数据库错误详情、文件路径等。这些信息在开发调试阶段很有用但在生产环境中就是安全隐患。我们测试的一个场景是让代理实现一个用户登录接口。当用户输入的密码错误时一个代理返回了“密码不匹配”的错误信息另一个代理返回了“用户不存在或密码错误”——后者是正确的做法因为它不会泄露用户是否存在。但当数据库连接失败时四个代理中有三个都把原始的数据库错误信息返回给了客户端包括数据库地址、端口、甚至部分SQL语句。这个问题的根源在于代理对“错误处理”的理解停留在“让调用方知道出了什么问题”的层面而没有考虑到“调用方可能是攻击者”这个安全视角。在代理的训练数据中大量的示例代码为了演示方便会把详细的错误信息直接抛出或返回代理把这些模式当作了标准做法。实操心得在使用编程代理生成核心代码时一定要在提示词中明确要求“错误信息不得包含堆栈、数据库详情、文件路径等敏感信息对外统一返回模糊的错误提示详细错误只记录到服务端日志”。这一句话就能显著降低信息泄露的风险。2.4 盲区四并发与竞态条件的处理缺失第四个盲区在并发场景下表现得尤为明显。当我们让代理实现一个“扣减库存”的功能时四个代理中有两个生成的代码存在竞态条件先查询库存判断是否足够然后更新库存。这个“查询-判断-更新”的序列在并发环境下是不安全的两个请求可能同时查到库存为1然后都执行扣减导致库存变成-1。正确的做法应该是使用数据库的原子操作比如UPDATE inventory SET count count - 1 WHERE count 1然后根据影响行数来判断是否扣减成功。或者使用乐观锁、悲观锁等机制。但代理生成的代码往往是最直观的“查询-判断-更新”模式因为这种模式在训练数据中最常见也最容易理解。这个盲区的危险之处在于它在功能测试阶段几乎不可能被发现。单线程测试下代码完全正确。只有在真实的并发环境下问题才会暴露出来。而核心代码中的并发问题往往意味着资金损失或数据不一致。代理之所以在这个问题上表现不佳是因为并发安全是一个需要“反直觉”思维的领域。人类工程师在学习并发编程时需要经过专门的训练才能养成“先想并发场景”的习惯。代理从代码中学习而大量的开源代码在并发处理上本身就是有问题的代理学到的是这些有问题的模式。3. 为什么编程代理会形成这些共性盲区3.1 训练数据的“多数派陷阱”编程代理的核心能力来自于对海量代码的学习。这些代码的来源主要是开源仓库、技术博客、教程文档等。问题在于这些代码中“功能正确”的代码远远多于“安全正确”的代码。一个功能正确但存在安全漏洞的代码示例在训练数据中可能被重复出现上千次而一个安全正确的实现可能只出现几十次。代理在学习过程中会倾向于选择“出现频率最高”的模式。这就是“多数派陷阱”代理选择的不是最好的写法而是最常见的写法。在普通业务代码中最常见的写法通常也够用。但在核心代码中最常见的写法往往就是最不安全的写法。举个例子在Python中生成随机字符串random.choice的出现频率远远高于secrets.choice。代理选择random不是因为它“不知道”secrets的存在而是因为在它的概率模型中random是更“自然”的选择。3.2 缺乏安全上下文的感知能力编程代理在生成代码时它看到的是代码的语法结构和逻辑流程但它看不到代码的“安全上下文”。它不知道这段代码是运行在公网环境还是内网环境不知道这个接口会不会被外部调用不知道这个数据是不是敏感数据。当代理生成一个“查询用户信息”的接口时它不知道这个接口是否需要鉴权不知道返回的用户信息中是否包含敏感字段不知道是否需要做数据脱敏。它只能根据代码本身的模式来推断而这种推断在安全场景下往往是不可靠的。人类工程师在写核心代码时脑子里有一张“威胁模型”的地图谁会攻击这个接口攻击者能控制哪些输入最坏情况下会造成什么后果。代理没有这张地图它只有代码模式的统计规律。3.3 提示词的局限性很多开发者在使用编程代理时提示词写得非常简短比如“帮我写一个用户登录接口”或者“实现一个支付回调处理”。这种提示词没有传达任何安全要求代理只能按照最通用的模式来生成代码。即使开发者写了一些安全要求比如“注意安全”代理的理解也非常模糊。它可能会加一些基本的参数校验但不会系统性地考虑加密、鉴权、错误处理、并发等各个维度的安全问题。实操心得我现在的做法是在让代理生成核心代码之前先写一段“安全约束清单”作为提示词的一部分。清单包括输入校验要求、加密算法要求、错误处理要求、并发安全要求、日志脱敏要求。这段清单大概两百字但能显著提升生成代码的安全质量。3.4 代理的“自信”与开发者的“信任”还有一个不容忽视的因素是代理的表达方式。编程代理在给出代码时通常会用非常自信的语气比如“这是一个完整的实现”、“这段代码已经考虑了各种情况”。这种自信的表达方式会让开发者放松警惕觉得代理已经处理好了安全问题。但代理的“自信”和它的实际安全能力是不匹配的。它只是在按照训练数据中的模式生成代码并不是真的“理解”了安全。开发者如果把这种自信当作可靠性的信号就会跳过安全审计的环节直接把代码合并到主分支。4. 核心代码场景下的代理使用策略4.1 分层策略哪些代码可以交给代理哪些不行经过这几个月的实践我们团队形成了一套分层策略。不是所有代码都适合交给代理也不是所有代码都必须手写。关键是根据代码的安全敏感度来分层。第一层可以放心交给代理的代码。包括单元测试的样板代码、数据模型的定义、CRUD接口的基本框架、配置文件的生成、文档注释的补全。这些代码的安全敏感度低即使代理生成的代码有些小问题也不会造成严重后果。第二层代理生成后需要人工审计的代码。包括业务逻辑的实现、API接口的处理逻辑、数据转换和格式化、日志记录。这些代码需要人工检查边界条件、错误处理和输入校验但整体上代理能节省大量时间。第三层代理只能作为参考必须人工重写的代码。包括鉴权与授权逻辑、加密与密钥管理、支付与交易流程、并发控制逻辑、核心算法。这些代码的安全要求极高代理生成的版本只能作为思路参考最终的实现必须由有安全经验的工程师来写。这个分层策略的核心逻辑是代理的价值在于加速“模式化”的编码工作而不是替代“需要安全判断”的编码工作。把代理用在第一层和第二层效率提升非常明显。把代理用在第三层省下来的时间可能还不够后面修漏洞的。4.2 提示词工程如何让代理生成更安全的代码如果你确实需要用代理来辅助核心代码的开发提示词的质量至关重要。以下是我总结的几个关键技巧。第一明确安全约束。不要只说“注意安全”要具体列出要求。比如“所有用户输入必须做白名单校验”、“密码哈希必须使用bcrypt且cost不低于12”、“错误信息不得包含堆栈和数据库详情”、“随机数必须使用secrets模块”。第二提供安全示例。如果你有一个安全正确的实现范例把它作为提示词的一部分提供给代理。代理会参考这个范例的风格和模式来生成代码这比抽象的安全要求有效得多。第三要求代理解释安全决策。在提示词中加上“请解释你在安全方面做了哪些考虑”。这有两个好处一是迫使代理在生成代码时考虑安全问题二是让你能快速判断代理的安全意识是否到位。第四分步骤生成。不要让代理一次性生成整个模块。把任务拆分成小步骤每一步生成后你检查一遍确认安全后再进行下一步。这样可以避免代理在长代码中“忘记”前面的安全约束。4.3 审计清单代理生成的核心代码必须检查什么即使你用了很好的提示词代理生成的代码在合并到主分支之前仍然需要经过系统的安全审计。以下是我团队使用的审计清单按优先级排列。输入校验方面所有外部输入是否都做了类型检查和范围校验边界值0、负数、极大值、空字符串、null是否都处理了是否有输入长度限制文件上传是否有类型和大小限制鉴权与授权方面每个接口是否都明确了所需的权限级别权限校验是否在业务逻辑之前执行是否存在越权访问的可能比如通过修改ID访问他人数据Token的过期和刷新机制是否正确加密与敏感数据方面密码是否使用了安全的哈希算法密钥是否硬编码在代码中敏感数据在日志中是否被脱敏传输层是否使用了加密错误处理方面错误信息是否泄露了内部细节异常是否都被捕获和处理是否存在未捕获的Promise rejection错误日志是否包含了足够的排查信息但不包含敏感数据并发与状态方面是否存在“查询-判断-更新”的竞态条件共享状态是否有正确的同步机制数据库事务的隔离级别是否合适幂等性是否得到保证这份清单看起来很长但实际操作中有经验的工程师过一遍核心代码的审计通常只需要十几分钟。这十几分钟换来的是对核心代码安全性的基本信心非常值得。5. 实操过程一次完整的代理辅助核心代码开发记录5.1 任务背景与初始提示词设计为了让你更直观地理解整个流程我完整记录一次我们团队使用代理开发核心代码的过程。任务是为一个内部管理系统实现“基于角色的访问控制”中间件。这个中间件需要拦截所有API请求根据用户的角色和请求的资源路径判断是否允许访问。我们选择了一个主流的编程代理来辅助开发。初始提示词是这样的请实现一个基于角色的访问控制中间件要求 1. 从请求头中解析JWT Token验证签名和过期时间 2. 从Token中提取用户ID和角色信息 3. 根据请求的方法和路径查询该角色是否有权限访问 4. 权限不足时返回403Token无效时返回401 5. 所有错误信息不得包含内部细节 6. 使用安全的随机数生成方式如果需要 7. 请解释你的安全设计决策这个提示词包含了基本的功能要求和安全约束。代理在几分钟后给出了一个完整的实现。5.2 代理生成代码的审计过程代理生成的代码整体结构是合理的一个中间件函数先解析Token再查询权限最后决定是否放行。但在审计过程中我们发现了几个问题。问题一Token解析没有处理异常。代理使用了jwt.verify来验证Token但没有用try-catch包裹。如果Token格式不正确jwt.verify会抛出异常导致中间件崩溃而不是返回401。这是一个典型的异常路径处理缺失。问题二权限查询使用了字符串拼接。代理在查询权限时把用户角色和请求路径拼接成了SQL查询语句。虽然在这个场景下角色和路径都来自服务端配置而非用户输入风险相对较低但这是一个不好的模式应该使用参数化查询。问题三缓存没有设置过期时间。代理为了提高性能加了一个内存缓存来存储角色权限映射。但缓存没有设置TTL如果权限配置在数据库中更新了缓存不会自动失效。问题四日志记录了完整的Token。代理在调试日志中打印了完整的Token字符串。这在生产环境中是严重的安全问题Token泄露意味着攻击者可以直接冒充用户。这四个问题中问题一和问题四是明确的安全问题问题二和问题三是代码质量问题但可能演变成安全问题。代理在“解释安全设计决策”部分提到了“使用了JWT验证”、“错误信息做了模糊处理”但它没有意识到自己在异常处理和日志脱敏上的疏忽。5.3 人工修正与最终实现针对审计发现的问题我们做了以下修正用try-catch包裹Token验证逻辑捕获所有JWT相关的异常统一返回401。把权限查询改为参数化查询避免任何形式的字符串拼接。给缓存加上5分钟的TTL并在权限更新接口中主动清除相关缓存。日志中只记录Token的前8位和后8位中间用星号替代用于排查问题时定位具体Token但不泄露完整内容。修正后的代码经过了安全团队的复审确认没有明显的安全漏洞后才合并到了主分支。整个流程从代理生成代码到最终合并大约花了两个小时。如果完全手写可能需要三到四个小时。代理节省了大约一半的时间但前提是我们有完善的安全审计流程。实操心得代理生成的代码在核心场景下我的经验是“生成十分钟审计半小时修正半小时”。总时间仍然比手写少但如果你跳过审计和修正直接合并省下来的时间迟早会以修漏洞的形式还回去而且代价更大。6. 常见问题与排查技巧实录6.1 代理生成的代码“看起来没问题”但实际有漏洞怎么办这是最常见也最危险的情况。代理生成的代码在功能测试中全部通过代码风格也很规范但安全审计时发现漏洞。应对这个问题的核心方法是不要依赖功能测试来判断安全性要依赖专门的安全审计清单。我的做法是把前面提到的审计清单做成一个检查表每次代理生成核心代码后逐项过一遍。这个检查表不需要每次都从头到尾仔细看但至少要做到“每项都扫一眼”。很多安全问题比如日志泄露Token、错误信息包含堆栈是肉眼可见的扫一眼就能发现。另外可以借助静态分析工具来做辅助检查。比如Python的bandit、JavaScript的eslint-plugin-security这些工具能自动发现一些常见的安全问题模式。虽然它们不能替代人工审计但能帮你快速过滤掉一批低级问题。6.2 代理在生成代码时“忘记”了提示词中的安全要求这个问题很常见。代理在生成长代码时注意力会逐渐从提示词的安全要求上转移开后面的代码可能就“忘记”了前面的约束。应对方法是把安全要求放在提示词的最后并且用醒目的格式标注。比如不要这样写提示词“请实现一个登录接口注意使用bcrypt错误信息不要泄露细节还要做输入校验。”这样写的话代理可能只记住了第一个要求。更好的写法是请实现一个用户登录接口。 功能要求 - 接收用户名和密码 - 验证成功后返回JWT Token - 验证失败返回401 安全约束必须全部满足 1. 密码哈希使用bcryptcost12 2. 错误信息统一为“用户名或密码错误” 3. 用户名和密码都必须做长度和字符校验 4. 日志中不得记录密码明文 5. 登录失败次数超过5次时锁定账户15分钟把安全约束单独列出来并且用编号标注代理的遵守率会明显提高。6.3 多个代理生成的代码互相矛盾时怎么选择有时候你会用不同的代理来生成同一段代码然后发现它们的实现方式完全不同。比如一个代理用了bcrypt另一个用了argon2一个代理用了数据库事务另一个用了乐观锁。这时候怎么选我的原则是优先选择更保守、更成熟的方案。bcrypt和argon2都是安全的密码哈希算法但bcrypt的生态更成熟库的稳定性更好所以我倾向于选bcrypt。数据库事务和乐观锁都能解决并发问题但事务的语义更清晰出错时更容易排查所以我倾向于选事务。另一个原则是选择你更熟悉的方案。如果你对某个方案不熟悉即使它在理论上更优你在审计和维护时也可能漏掉问题。选你熟悉的方案至少你能判断它是否正确。6.4 代理生成的代码在本地测试通过但上线后出问题这个问题通常和并发、环境差异、或者边界条件有关。代理生成的代码在本地单线程测试下没问题但上线后面对真实的并发流量就暴露了问题。排查这类问题的第一步是检查所有涉及共享状态的操作。数据库的读写、缓存的更新、文件的写入这些操作在并发环境下都可能出问题。代理生成的代码往往没有考虑这些场景。第二步是检查环境相关的配置。代理生成的代码可能硬编码了一些本地环境的配置比如数据库连接字符串、API地址、密钥等。上线前一定要检查这些配置是否被正确替换。第三步是用压力测试来暴露问题。如果条件允许在上线前用压力测试工具比如ab、wrk、locust对核心接口做一轮并发测试。很多并发问题只有在压力下才会暴露出来。6.5 常见问题速查表问题现象可能原因排查方法修复建议功能测试通过但安全审计发现漏洞代理只关注正常路径使用安全审计清单逐项检查补充边界校验、异常处理、日志脱敏代理“忘记”安全要求提示词太长安全要求被淹没检查提示词结构把安全要求单独列出并编号上线后出现数据不一致并发竞态条件检查“查询-判断-更新”序列改用原子操作或加锁错误信息泄露内部细节代理默认返回详细错误检查所有错误处理分支统一模糊化错误信息详细错误记日志随机数可预测使用了不安全的随机API搜索代码中的random调用替换为secrets或crypto.randomBytes7. 代理辅助核心代码开发的长期实践建议7.1 建立团队内部的安全编码规范代理生成的代码质量很大程度上取决于你给它的约束。如果你有一套明确的团队安全编码规范把它作为提示词的一部分提供给代理生成代码的安全质量会显著提升。我们团队的安全编码规范包括所有外部输入必须校验、密码必须用bcrypt、Token必须用secrets生成、错误信息必须模糊化、日志必须脱敏、数据库操作必须参数化、并发操作必须考虑原子性。这套规范大概一页纸但它是我们使用代理时的“安全底线”。规范不需要很复杂关键是要具体、可执行。不要写“注意安全”这种模糊的要求要写“密码哈希使用bcryptcost不低于12”这种代理能直接执行的约束。7.2 把安全审计纳入代理工作流不要把安全审计当作一个独立的、事后的环节要把它嵌入到代理工作流中。我的做法是代理生成代码后先让另一个代理或者同一个代理用不同的提示词来做一轮安全审计找出潜在的安全问题。然后人工复审代理的审计结果确认哪些是真正的问题哪些是误报。这个“代理生成-代理审计-人工复审”的流程比“代理生成-人工审计”的效率更高。代理审计能快速扫一遍常见的安全问题模式人工复审只需要关注代理标记出来的可疑点和代理可能漏掉的高级问题。7.3 持续更新你的“代理安全提示词库”代理的能力在快速迭代你的提示词也应该持续更新。每次发现代理生成了有安全问题的代码就把对应的约束条件加到提示词库中。时间长了你会积累出一套针对你团队技术栈的、非常有效的安全提示词。我们团队的提示词库现在有二十多条安全约束覆盖了输入校验、鉴权、加密、错误处理、日志、并发等各个维度。每次让代理生成核心代码时我会根据任务类型选择相关的约束条件拼接到提示词中。这套提示词库是我们使用代理过程中最有价值的积累之一。7.4 不要放弃对核心代码的“手感”最后一点也是最重要的一点不要因为有了代理就放弃对核心代码的“手感”。代理可以帮你写代码但它不能替你理解代码。如果你对核心代码的实现细节不再熟悉当出现安全问题时你连排查的方向都找不到。我的建议是核心代码的关键部分即使让代理生成了初版你也要自己动手重写一遍。重写的过程不是为了“写得更好”而是为了“理解得更深”。你亲手写过的鉴权逻辑和你看过的鉴权逻辑在出问题时的排查效率是完全不同的。代理是一个强大的工具但它不是安全责任的转移对象。核心代码的安全责任最终还是在写代码的人身上。代理可以加速你的工作但不能替代你的判断。这个边界在使用代理的每一天都值得反复提醒自己。
返回列表