← 返回蜂巢洞察

如何为您的开发团队制定端点数据丢失预防策略

开发人员的笔记本电脑中存储着比大多数人意识到的更多敏感数据:API密钥、数据库登录凭据、测试环境的配置信息,有时甚至还包括为了“测试”而下载的正式生产环境数据副本。 最终用户要为75%的内部数据丢失事件负责,而这些事件大多属于意外情况,并非恶意行为所致。对于开发团队来说,这种风险主要集中在终端设备上——也就是那些用于编写代码、进行测试以及部署代码的机器上。 以下是制定保护这些终端设备的策略的方法,而且这一策略不会影响团队的正常工作效率。 目录 如何制定终端数据丢失预防策略 步骤1:确定终端设备中敏感数据的存放位置 步骤2:将访问控制作为基础措施来实施 步骤3:强化终端设备的操作系统安全 步骤4

开发人员的笔记本电脑中存储着比大多数人意识到的更多敏感数据:API密钥、数据库登录凭据、测试环境的配置信息,有时甚至还包括为了“测试”而下载的正式生产环境数据副本。 最终用户要为75%的内部数据丢失事件负责,而这些事件大多属于意外情况,并非恶意行为所致。对于开发团队来说,这种风险主要集中在终端设备上——也就是那些用于编写代码、进行测试以及部署代码的机器上。 以下是制定保护这些终端设备的策略的方法,而且这一策略不会影响团队的正常工作效率。

目录

如何制定终端数据丢失预防策略

f3675a55-3f39-4c4f-bb60-8c036791842e

步骤1:确定终端设备中敏感数据的存放位置

首先,需要弄清楚团队成员使用的各类设备中哪些地方保存着敏感数据。常见的敏感数据包括那些包含硬编码登录凭据的配置文件、从未被添加到`.gitignore`文件中的`.env`文件,以及六个月前用于调试而生成的数据库备份文件——这些文件很可能被遗忘了,因此依然存在于设备上。

任何可以被视作备份的数据,哪怕是临时制作的备份,都应该被视为敏感信息来对待。因此,如果尚未启用备份加密功能,那么这些备份副本就和原始数据一样容易受到攻击。

大多数团队在开始检查后都会发现一些令人意外的问题。对几台笔记本电脑进行简单检查,通常会发现整个团队中都存在一些重复出现的不良习惯——因为一旦某个开发者的快捷方式被证明有效,它就很可能会在团队中传播开来。

使用一个简单的电子表格来记录哪些敏感数据存储在哪里、使用的是哪台机器,这样就能为后续的防护措施提供具体的依据。如果跳过这一步,那么之后采取的所有控制措施都只能凭猜测来确定它们应该保护什么。

可以先尝试以下步骤:

  1. 选择三到五台开发者的电脑作为初始检查对象。

  2. 在常见的位置搜索环境配置文件、凭证信息、数据库备份文件以及私钥等敏感数据。

  3. 记录查找结果,包括文件的位置、数据类型、所有者,以及这些数据是否仍然被需要。

  4. 删除不必要的副本,并更新那些可能已经被泄露的凭证信息。

对于Linux系统来说,基本的检查命令可以如下所示:

find ~ -type f \( -name ".env" -o -name "*.pem" -o -name "*.key" \) 2>/dev/null

这种检查方法虽然不能发现所有隐藏的敏感信息,但至少能为团队提供一个初步的清单。

例如,如果检查中发现~/projects/client-api/.env文件中包含了数据库密码,那么就需要将这个凭证信息转移到专门的加密管理工具中,同时删除本地文件,并更新密码。

步骤2:将访问控制作为基础措施来实施

任何端点数据保护策略都必须建立在有效的访问控制体系之上。如果所有开发者都可以随意获取生产环境的凭证信息,那么无论后续采取多少监控措施,都无法解决这个问题。

基于角色和属性来设计的可扩展访问控制机制,能够从源头上限制被入侵的笔记本电脑可能泄露的信息范围。毕竟,一套被盗取的凭证信息,其危害程度其实取决于它们所拥有的权限。

这也是整个列表中实施起来最简单、出错概率最低,同时也最容易进行修正的控制措施。

定期审查哪些人可以访问哪些资源,而不仅仅是在新员工入职时进行一次检查,这样就能及时发现那些在项目结束后被遗忘、仍然未被撤销的权限设置。

简单的实施流程如下:

  1. 列出所有生产系统及敏感资源。

  2. 创建诸如“开发者”、“高级开发者”、“DevOps工程师”和“管理员”等角色。

  3. 明确每个角色实际需要访问哪些资源。

  4. 删除那些与某人当前工作无关的权限设置。

  5. 每当有人更换项目或离开团队时,都要重新审查其访问权限。

过度授权与适当授权之间的区别,通过对比就能很容易地看出来。以下是在Postgres数据库中为“开发者”角色设置不同权限方式的示例。

过度访问权限: -- 同一种角色拥有对所有数据库、所有表以及所有操作的访问权限 GRANT ALL PRIVILEGES ON DATABASE prod_db TO dev_team; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO dev_team; 适当的访问权限: -- 只在真正需要执行操作的数据库上授予相应的权限 GRANT CONNECT ON DATABASE staging_db TO dev_team; GRANT USAGE ON SCHEMA public TO dev_team; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO dev_team; -- 完全禁止对生产环境的直接访问 REVOKE ALL ON DATABASE prod_db FROM dev_team;

同样的权限划分原则也可以清晰地应用到角色配置中,而这种方式通常更便于团队理解和使用:

仅能读取自己负责的项目数据

只能读取自己团队负责的项目数据

角色

开发/测试环境数据库

生产环境数据库

密钥管理工具

云控制台

普通开发者

读写权限

无权限

无权限

高级开发者

读写权限

限时只限读取权限

仅限读取权限

DevOps工程师

读写权限

仅限于部署相关操作

读写权限

具有特定管理权限

管理员

读写权限

全部权限

全部权限

全部权限

例如,普通开发者应该拥有对开发环境和测试环境数据库的读写权限,因为这些环境是他们日常工作的必备部分;但他们不应该直接访问生产环境数据库。而DevOps团队成员可能需要在部署和故障排查时使用生产环境数据库,但他们的操作权限应被严格限制在他们负责的任务范围内。

步骤3:加强终端操作系统的安全防护

大多数开发机器都运行着某种版本的Linux系统,无论是直接安装的,还是通过WSL运行的。操作系统层是许多数据保护措施得以实际执行的地方:文件权限设置、磁盘加密以及用户权限的正确划分等。

熟练掌握Linux核心命令可以帮助我们更轻松地检查机器上正在运行的程序,正确设置文件权限,并在问题真正发生之前发现异常。

磁盘加密也是一个值得重视的安全措施。如果一台笔记本电脑的硬盘没有经过加密,那么一旦有人将这块硬盘取出并安装到其他设备上,其中的所有数据都会立刻被泄露,而根本不需要输入密码。

启用全盘加密,那么那台被偷走的笔记本电脑所带来的麻烦就会大大减少。

对于Linux开发者来说,在进行终端安全检查时,可以执行以下几条命令:

whoami
sudo -l
ls -la ~/.ssh
df -h

这些命令可以帮助了解当前用户身份、可用的sudo权限、SSH配置文件以及磁盘使用情况。

文件权限设置是安全防护中的关键环节。如果某个敏感信息被保存在所有用户都能访问的文件中,那么该机器上的每个进程和每个账户都能够获取这些信息,这样一来,前面步骤中设置的安全控制措施就会失效。

在修改任何配置之前,请先确认当前的权限设置是什么:

ls -la ~/.ssh
find ~/projects -name ".env" -exec ls -l {} \;

符合安全要求的权限设置示例如下:

-rw-r--r--  1 dev  staff  1704  Mar 12 09:14 /home/dev/.ssh/id_ed25519
-rw-rw-r--  1 dev  staff   612  Mar 12 09:14 /home/dev/projects/client-api/.env

末尾的r--表示组成员和其他所有用户都可以读取私钥和认证信息。应该将权限修改为只有文件所有者才能访问这些内容:

chmod 700 ~/.ssh              # 目录:仅文件所有者可访问
chmod 600 ~/.ssh/id_ed25519   # 私钥:文件所有者可读写
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/projects/client-api/.env

如果需要一次性修改整个projects目录下的文件权限,可以执行以下命令:

find ~/projects -name ".env" -exec chmod 600 {} \;

接下来是具体的安全加固步骤:

  1. 启用全盘加密。

  2. 确保操作系统及安全补丁都是最新的。

  3. 删除不必要的管理员权限。

  4. 检查SSH密钥,移除未使用的密钥。

  5. 开启屏幕锁定功能。

  6. 根据需要配置终端监控机制。

    例如,如果开发者的笔记本电脑中还保存着之前项目的旧SSH密钥,应立即将其删除并取消相应的访问权限,而不能让这些密钥继续处于可被使用的状态。

有些团队会从源头上规避这种风险,他们将开发工作转移到虚拟桌面基础设施上,在那里敏感数据会被集中存储,而不会保存在物理机器上。然而,这种方式只是将数据保护的责任转移到了其他地方,并没有真正消除风险,因为虚拟环境本身同样需要相应的访问控制措施和监控机制,才能防止虚拟机中的数据丢失。

步骤4:锁定容器与本地环境

如今,本地开发越来越多地在容器中进行,而每个容器都构成了一个独立的小环境。如果开发者不注意哪些数据会被存储在这些容器中,这些环境就有可能泄露敏感信息。

有时,.env文件可能会被直接嵌入到镜像中;或者,在项目结束后,某些凭据仍会留在容器的环境变量中。

要正确使用Docker,就必须了解如何彻底防止敏感信息被包含在镜像中。应该使用秘密管理工具或运行时注入机制来处理这些数据,而不要将任何凭据硬编码到Dockerfile中。

下面这个Dockerfile看起来非常简单,但实际上存在两种会导致信息泄露的问题:

FROM node:20
WORKDIR /app
# 问题1:会将所有文件复制进去,包括.env、*.pem以及.git历史记录
COPY . .
# 问题2:这些凭据会被永久性地写入镜像中
ENV DB_PASSWORD="prod-9f2a-4c11-secret"
RUN npm install
CMD ["node", "server.js"]

即使在后续的构建步骤中删除了这些文件,也无法解决问题,因为之前的构建层仍然包含这些敏感信息。任何拉取该镜像的人都可以读取到这些内容:

docker history --no-trunc my-app:latest | grep -i password

docker run --rm -it --entrypoint sh my-app:latest -c "cat .env"

正确的做法是在Dockerfile的开头添加一个`.dockerignore`文件,这样就可以完全排除敏感文件被包含在镜像中的可能性:

# .dockerignore

.env

.env.*

*.pem

*.key

.git

node_modules

然后只复制应用程序真正需要的文件,将凭据排除在镜像之外:

FROM node:20

WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
# 只复制应用程序代码,而不是整个目录
COPY src ./src
CMD ["node", "src/server.js"]

可以在运行时再提供这些凭据:

docker run -e DB_PASSWORD="$DB_PASSWORD" my-app:latest

实际建议:在推送镜像之前,一定要检查其中是否包含 `.env` 文件、私钥、凭据等敏感信息。

步骤5:在代码发布前发现并修复泄露问题

如果能在早期发现泄露问题,那么造成的损失就会小很多。

可以将自动化的秘密扫描功能集成到CI/CD流水线中,这样,在任何硬编码的API密钥被放入公共仓库之前,系统就能立即发出警报。

Gitleaks和TruffleHog都能很好地处理这类问题——它们会在流水线中运行,一旦检测到潜在的敏感信息,就会立即终止构建过程。

调整警报机制需要一些耐心,但如果不执行这一步骤,往往会产生反效果。那些经常发出误报的扫描工具会让人忽略所有的警告,因此花时间配置合适的规则来保护代码库是非常有必要的。

例如,GitHub Actions工作流可以在代码投入生产环境之前运行Gitleaks工具进行扫描:

name: 秘密信息扫描

on:

  pull_request:

  push:

jobs:

  gitleaks:

    runs-on: ubuntu-latest

    steps:

      - uses: actions/checkout@v4

        with:
          fetch-depth: 0

      - uses: gitleaks/gitleaks-action@v2

通过这种设置,每当开发人员提交代码或发起拉取请求时,仓库就会被自动扫描。如果Gitleaks检测到潜在的敏感信息,工作流会立即停止,从而防止这些信息继续进入部署流程。

一旦发现敏感信息,系统会在工作流日志中显示如下内容:

发现的信息:AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI...
敏感信息:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
规则ID:aws-access-token
熵值:4.31
文件路径:services/billing/.env.staging
行号:12
提交哈希:8f2a1c9dbe4477a1c0f9e2b3a5d7c8e1f0a2b3c4
作者:dev@example.com
已扫描14次提交,发现1处安全漏洞
错误信息:进程以退出码1结束。

正是这个非零的退出码阻止了代码的合并。文件名、行号和提交哈希为处理这些问题的人提供了明确的方向。

适当调整警报设置需要一些耐心,但如果忽略这一步骤,往往会产生反效果。千万不要让频繁的误报导致团队成员不加仔细地忽略所有警告。因此,请花时间根据你的代码库实际情况来配置规则。

这些配置通常在仓库根目录下的`.gitleaks.toml`文件中完成,你可以在其中列出那些确实包含合法敏感信息的路径,从而免于被扫描:

[extend]
useDefault = true

[[rules]]
id = "aws-access-token"
  [rules.allowlist]
  paths = [
    '''tests/fixtures/.*''',
    '''docs/examples/.*'''
  ]
  regexes = [
    '''AKIAIOSFODNN7EXAMPLE'''
  ]

请尽量缩小允许列表的范围。仅仅因为某个目录中有一个文件会触发扫描工具,就将其整个目录列入允许名单,这是导致敏感信息泄露的常见原因。

例如,如果有开发人员不小心将API密钥包含在拉取请求中,Gitleaks会在工作流中立即标记出来,这样拉取请求就无法继续进行。团队会及时删除该密钥,并更换新的凭证,然后再合并代码。

步骤6:扩展扫描范围至公开接口

大多数端点数据保护策略主要针对笔记本电脑和开发机器,但公共网站同样需要接受严格的安全检查,即使这些网站是由非技术团队维护的。

你的网站上可能存在配置不当的联系表单、被遗忘但仍处于在线状态的测试子域名,或者未得到妥善保护的管理员面板。API安全测试平台可以在敏感数据受到威胁之前,检测这些公开接口是否存在漏洞或业务逻辑错误。任何一种情况都可能像一次疏忽的代码提交一样,导致数据泄露。

问题的一部分在于,网页设计与安全往往被视为由不同人员负责的两项独立工作。那些从一开始就将托管、维护和安全措施纳入开发流程的网站,其运行稳定性要远远高于那些在出现问题后才才添加这些功能的网站。

对于面向公众的网站而言,这种持续的监管机制与开发者机器上的终端监控机制同样重要。那些缺乏关注的管理环节,往往是问题逐渐累积、最终被忽视的地方,直到某些事件迫使人们重新重视这些问题为止。

如果你的开发团队同时也负责维护营销网站,那么就应该将其视为整个安全防护体系的一部分,像对待其他项目一样定期进行检查和维护,而不是把这项工作当作某人在有空时才去做的事情。

只需每月进行一次简单的检查,就能在这些问题变得难以解决之前及时发现它们。首先列出所有正在使用的域名和子域名,然后确认它们是否仍然需要对外公开访问。

在实际操作中,这种情况通常是这样发生的:开发团队完成客户门户的重新设计后,会创建一个名为staging-v2.example.com的测试环境来向相关方展示成果。测试过程进行得很顺利,也没有人删除这个测试环境,它一直使用的是为演示而准备的生产环境数据库副本。

八个月后,在一次常规的子域名检查中,这个问题被发现了:

# 所有子域名仍然可以正常访问
dig +short staging-v2.example.com
203.0.113.47

当请求返回200状态码且不需要输入任何认证信息时,就说明存在问题。进一步检查数据可以确认这一情况:

curl -s https://staging-v2.example.com/api/v1/customers | head -c 200
[{"id":4471,"email":"real.customer@example.com","phone":"+1-555-0142",
"plan":"enterprise","lastinvoice":"2025-11-03"}]

这些实际上是生产环境中的客户数据,但由于没有进行身份验证,任何人都能够通过查询证书透明度日志来访问这些信息。解决这个问题的步骤如下:

  1. 首先,立即将这个测试环境关闭。

  2. 检查访问日志,看看是否还有其他人先发现了这个问题。

  3. 判断这个测试环境是否还有必要保留。如果不需要了,就删除它并取消相应的DNS记录。

  4. 如果还需要使用这个测试环境,就需要为它添加身份验证机制或IP访问控制列表,并用生成的测试数据替换原有的生产环境数据库。

  5. 将所有子域名都纳入每月的定期检查范围,这样就不会有某个子域名被忽视长达八个月之久。

对于公共表单、管理面板、云存储以及未使用的API接口,也都应该采取同样的监管措施。我们的目标是要确保所有面向互联网的接口都能得到团队的关注和定期维护。

步骤7:进行监控、评估,并确保政策执行得当

如果没有相应的监测机制,任何数据泄露防护策略都称不上是有效的方案。团队需要清楚地了解在实践中数据泄露究竟发生在哪些地方;就像营销团队会跟踪品牌在各种人工智能平台上的曝光情况一样。

在保险行业,Similarweb专门为此开发的AEO平台能够追踪品牌在由人工智能生成的答案中被提及的地点和方式,从而发现那些通过手动逐一检查根本无法发现的规律。

终端设备的安全监控也是基于同样的原理。如果没有一个仪表板来显示哪些敏感信息被泄露了,或者哪些机器已经不再符合安全标准,团队就会把精力浪费在事后处理问题上,而无法及时预防这些事故的发生。

这一原则同样适用于数据备份工作:未经测试的备份方案其实只是一种假设而已。定期测试你的灾难恢复计划,才能确保在出现问题时,你的数据备份机制能够正常发挥作用。

这一原则不仅适用于笔记本电脑,也适用于其他设备。大多数公司都会将敏感数据存储在Microsoft 365系统中(包括邮箱、SharePoint站点、OneDrive文件夹或Teams频道),而确保这些数据真正得到保护,而不仅仅是被保留下来,通常是开发团队或IT团队的职责。

微软提供的原生数据保留功能可以在短时间内防止数据被意外删除,但它并不能帮助企业从勒索软件的攻击中恢复数据,也无法解决那些数周内都没有被人发现的账户安全问题。如果只依赖这种内置的数据保留机制,而不进行独立的Microsoft 365数据备份,那么团队就会像本文所警告的那样,陷入未经验证的假设之中。

在这里,政策与各种工具一样重要。只有当所有受这些政策约束的人真正相信它们时,这些政策才能发挥应有的作用,而这一点比检查工具是否得到遵守要更难以衡量。这时,匿名员工满意度调查工具就派上了用场——它能够揭示团队是否真正信任某项安全规定,还是只是在表面上遵守而已。

安全政策也面临着类似的挑战。那些没有具体背景信息、被生硬地强加给团队的模糊规定,往往会让开发人员在实际操作中难以遵循。如果给团队提供的政策他们根本无法理解,最终他们就会想出各种变通方法来应对这些规定,而无论制定这些规定的初衷是多么良好。

那些具体明确、配有详细解释的规定,通常比那些被深藏在培训资料中的通用PDF文件更易于被人们遵守。

安全仪表板能够简化监控流程。通过这个仪表板,可以追踪检测到的敏感信息数量、未处于受控状态下的终端设备数量、权限变更情况以及各类问题的解决时间。

对于一个由20名开发人员组成的团队来说,这样的仪表板结构完全可以很简单:

具有生产环境访问权限的用户数量

未经过审核的子域名数量

泄露的凭证被更换的平均时间

24小时内

指标

上个月

本月

目标值

变化趋势

在代码集成过程中检测到的敏感信息

6条

2条

0条

正在改善

在合并后的代码中发现的敏感信息

1条

0条

0条

正在改善

已启用全盘加密的终端设备数量

17台/20台

20台/20台

100%

达到目标

未安装安全更新的机器数量(超过30天)

4台

5台

0台

情况正在恶化

9人

3人

0人

达到目标

11个

0个

0个

达到目标

3天

6小时

正在改善

在这样的表格中,有两点会立刻引起注意,而这些信息从事故报告中是无法获得的。

  1. 保密信息在合并之前就被检测出来,这说明第5步流程确实起到了应有的作用。

  2. 补丁应用的频率在下降,这意味着更新过程中存在某些问题,而再发送一封提醒邮件也不太可能解决这些问题。

例如,如果发现保密扫描工具在某个拉取请求中检测到了AWS凭证,请立即停止合并操作,撤销或更换该凭证,将其从代码库中移除,并检查其他地方是否还存在这种凭证。需要查明为什么开发人员能够访问这些凭证,并调整工作流程以避免类似情况再次发生。

务必定期监控这些指标,而不要等到真正发生事故才采取行动。如果同样的违规行为持续存在,就应该考虑制定更明确的政策、使用更先进的工具或优化开发流程,而不是仅仅发出更多的警告。

数据丢失预防流程图,展示了五个步骤:发现与分类、监控与检查、执行政策、报告与记录、优化与调整

将安全性融入团队现有的工作流程中

一个有效的数据丢失预防策略并不意味着要通过繁琐的审批流程来拖慢工程师的工作进度,也不意味着要将所有笔记本电脑都统一成固定的企业形象;同时,这种策略更不应该影响客户体验,因为快速交付产品的目的本来就是为了更好地服务用户,而不会在过程中泄露他们的数据。

最有效的终端数据丢失预防措施通常是在后台默默运行的,日常工作中几乎察觉不到它们的存在:访问控制机制可以将受影响的范围控制在最小范围内,持续集成/持续部署流程可以在错误被发布之前将其发现并纠正,而监控系统则能帮助团队找出真正存在的问题,而不是让大家去猜测。

首先从访问控制和持续集成/持续部署开始入手,因为这两项措施能够以最小的阻力发现常见的错误;一旦这个基础扎实了,再逐步扩展其他安全措施。

在实施这些步骤时,选择合适的工具也是非常重要的,包括最好的备份软件等。这些工具会让整个安全体系的构建和维护变得更加容易。

对于那些希望加强自身技术基础的人来说,无论是学习Linux基础知识、了解容器化技术,还是掌握持续集成/持续部署流程,都可以在freeCodeCamp网站上找到免费且实用的教程来帮助自己学习这些内容。

相关文章

技术实践

如何将结构化数据(JSON-LD)添加到Next.js网站中并进行验证

结构化数据对搜索引擎来说一直都非常重要。当搜索引擎读取你的页面时,它看到的是HTML代码:标题、段落、日期以及名称等等。 结构化数据能够直接告诉搜索引擎这些内容的含义。例如,这个页面是一篇文章,这是它的标题,这篇文章是由某个人撰写的,并且发布于某个特定的日期。 对我来说,搜索引擎优化并不是一个需要简单勾选的步骤。我希望自己创建的产品和网站能够被人们找到,并且在被找到之后也能被正确理解。 因此,只要合适,我就会在每一页中添加结构化数据。而且我认为,随着人工智能系统开始根据网页内容来回答问题,结构化数据的重要性只会越来越明显,而不会减弱。 在Next.js应用程序中,没有任何工具会自动为你生成这些

阅读全文
技术实践

如何使用NestJS的观察功能:开发者必备的可观测性实践指南

可观测性并不是一个新出现的问题,NestJS也绝不是第一个试图解决这个问题的生态系统。 但NestJS Observe之所以值得关注,是因为它提出了一个更为具体的问题:当可观测性系统能够理解其所监控的框架时,会发生什么呢? 在了解其实现机制之前,我们首先需要明确这个问题,以及为什么框架的上下文会对此产生重要影响。 可观测性问题 如果你曾经长期开发并维护过服务器应用程序,你肯定遇到过这样的情况:某个API莫名其妙地运行速度变慢了,但你却不知道原因何在。 你检查了日志,却发现没有任何明显的异常。数据库运行正常,也没有任何错误信息;在你的本地机器上,这个接口也能正常工作。 于是你添加了一些日志记录:

阅读全文
技术实践

如何打破人工智能编程代理的循环机制

你很可能已经看过这样的情景:在使用人工智能编码工具构建的应用程序中,出现了某些故障。你让这个工具去修复这些问题,它似乎也“修复”了它们,但实际上错误依然存在,或者又出现了新的问题。 于是你会说“还是不行”。工具会再次尝试修复。二十分钟后,你会发现代码中的错误更多了,可用的功能也更少了,而且完全不知道该如何让应用程序恢复到正常状态。 人们常常用“人工智能反而使问题更加严重”或者“工具陷入了无限循环的修复模式”这样的表述来描述这种情况。这并不是某个特定产品的缺陷,像Replit、Cursor、Claude Code、Base44这类工具都会出现同样的问题,因为这种故障的本质是系统性的。 本教程将解

阅读全文
技术实践

如何向英国税务海关总署的“数字化纳税”API提交季度更新报告

每年有四次,所有参与“税收数字化”计划的个体经营者和房东都必须向英国税务海关总署提交一份收入与支出的汇总报表。 2026-27纳税年度的第一个截止日期是8月7日,这个期限已经过去;第二个截止日期则是11月7日。每份汇总报表都需要通过软件向英国税务海关总署发送一次API请求,而本教程正是专门讲解如何正确完成这些请求操作的。 您无需事先阅读任何其他资料即可跟随本教程进行操作。每次进行“税收数字化”集成时所需的一次性设置信息(包括沙箱应用程序、OAuth 2.0访问令牌以及防欺诈相关配置)已在下方的简要总结中列出,同时每段代码示例中也都会使用到一些辅助函数。 如果您想深入了解这些设置步骤,我曾在 之

阅读全文