你的AI编程助手,竟是安全隐患!这样修复

你的AI编程助手,竟是安全隐患!这样修复

五月 07, 2026 ai security credential management claude code developer security infrastructure hardening threat prevention coding agents

你的AI编程助手,为什么是个安全隐患?(教你怎么修)

上周我突然醒悟:几个月来,我让AI助手在自己机器上随便跑命令。它能摸到AWS密钥、SSH钥匙、私有GitHub仓库,还有home目录里的一切。吓人吧?可我之前压根没想过,因为它超好用,还没出过事。

这种想法,超级危险。生产数据库说没就没了。

方便过头,就是安全坑

实话实说,现在的AI编程工具,权限跟给资深运维大牛开绿灯差不多。我们绝不会让新外包随便SSH全服务器,但对LLM,我们眼睛都不眨就给了。

不是工具坏,是我们太粗心。这些家伙太能干了,我们就忘了它能干啥。一条prompt注入、目标偏了点,或者无害命令,就能把密钥偷走。你根本看不见。

好消息是,像Claude Code这样的工具,有靠谱的安全开关。大多数人就是懒得开。

先搞懂默认风险

默认下,很多AI助手是“auto”模式。不明确挡住或标记审的命令,它就直接跑。听起来高效?实际呢:

deny list空着,auto模式开着,它能随便:

  • curl 打任何接口
  • wget 下文件
  • ssh 连远程服务器
  • nc 开任意网络连接
  • 读项目里所有.env
  • ~/.aws/credentials~/.ssh/keys~/.gnupg
  • 直推代码到仓库

全悄无声息。没弹窗,没提示。就这么干了。

三层安全墙,步步挡住

你得精细控。不用啥都审,但高危必须管。来,分层想:

第一层:硬挡住

凭证相关的,全deny掉:

{
  "deny": [
    "Read(~/.ssh/**)",
    "Read(~/.aws/**)",
    "Read(~/.gnupg/**)",
    "Read(~/.azure/**)",
    "Read(~/.kube/**)",
    "Read(~/.npmrc)",
    "Read(~/.git-credentials)",
    "Read(*.env)",
    "Read(.env.*)",
    "Bash(curl *)",
    "Bash(wget *)",
    "Bash(nc *)",
    "Bash(ssh *)"
  ]
}

这像防火墙。列上的,永不放行。AI再想偷密钥,系统级就卡死。

第二层:审一审

可逆但危险的,放“ask”里:

{
  "ask": [
    "Bash(git push *)",
    "Bash(git commit *)",
    "Bash(git merge *)",
    "Bash(git reset *)",
    "Bash(npm publish *)",
    "Bash(docker push *)"
  ]
}

AI可能真需要推代码、发包、部署镜像。但得让你点头再干。效率还在,高危不乱来。

第三层:直通车

安全的,直接allow:

{
  "allow": [
    "Bash(npm run *)",
    "Bash(git status *)",
    "Bash(git diff *)",
    "Bash(git log *)",
    "Bash(ls *)",
    "Read(src/**)",
    "Read(tests/**)"
  ]
}

这些不改状态,或改得安全。AI随便跑,不用烦你。

默认模式,别选错

deny和ask设好后,还得挑默认模式。三种:

  1. auto - 没挡的悄然跑。最快,但deny list得铁板钉钉。

  2. acceptEdits - 读文件、提建议随便,bash命令(allow外的)得问。平衡好。

  3. ask - 高危全问。最慢,但超稳。

大部分人用acceptEdits最好。产出高,还得动脑子决定操作。

实战配置,一键抄

生产级配置长这样:

{
  "permissions": {
    "deny": [
      "Read(~/.ssh/**)",
      "Read(~/.aws/**)",
      "Read(~/.gnupg/**)",
      "Read(~/.azure/**)",
      "Read(~/.kube/**)",
      "Read(~/.npmrc)",
      "Read(~/.git-credentials)",
      "Read(~/.config/gh/**)",
      "Read(*.env)",
      "Read(.env.*)",
      "Bash(curl *)",
      "Bash(wget *)",
      "Bash(nc *)",
      "Bash(ssh *)"
    ],
    "ask": [
      "Bash(git push *)",
      "Bash(git commit *)",
      "Bash(npm publish *)",
      "Bash(docker push *)"
    ],
    "allow": [
      "Bash(npm run *)",
      "Bash(npm install *)",
      "Bash(npm test *)",
      "Bash(git status *)",
      "Bash(git diff *)",
      "Bash(git log *)"
    ],
    "defaultMode": "acceptEdits"
  }
}

够用不超限。测代码、lint、看仓库都行。但偷密钥、乱推、不请示连外网?门都没有。

两种心态,两种场景

我设了俩shell别名:

# 默认:平衡安全
alias cc="claude --permission-mode auto"

# 调试:全信它(慎用)
alias ccd="claude --permission-mode dangerously-skip-permissions"

95%用ccccd留给debug地狱,那时我明知风险还选信它。每次敲ccd,都是清醒决定。

行业通病

不只Claude Code。所有跑shell的AI工具都有这坑:GitHub Copilot扩展、Devin、Cursor、ChatGPT带执行。全是方便对安全的权衡。

Claude Code牛在给了精细控。别人要么全信,要么不用。没中间路。

团队部署,别掉链子

团队用AI助手?这事儿更要命。别指望开发者自己想周全,大多出事才醒。

试试:

  • 团队配置强制deny list
  • 文件系统级挡凭证
  • 用临时token,别长效密钥
  • 网络控防数据外泄
  • 教大家产出和风险不是一回事

总结一句

AI编程助手真香,值用。但没免费午餐。安全控在那儿,就用起来。

今天花15分钟,deny凭证,ask部署,挑个靠谱默认模式。然后安心:它能干活,还被拴住。

“还没出事”绝不是安全策略。醒醒吧。

Read in other languages:

RU BG EL CS UZ TR SV FI RO PT PL NB NL HU IT FR ES DE DA EN