你的AI编程助手,竟是安全隐患!这样修复
你的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设好后,还得挑默认模式。三种:
auto- 没挡的悄然跑。最快,但deny list得铁板钉钉。acceptEdits- 读文件、提建议随便,bash命令(allow外的)得问。平衡好。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%用cc。ccd留给debug地狱,那时我明知风险还选信它。每次敲ccd,都是清醒决定。
行业通病
不只Claude Code。所有跑shell的AI工具都有这坑:GitHub Copilot扩展、Devin、Cursor、ChatGPT带执行。全是方便对安全的权衡。
Claude Code牛在给了精细控。别人要么全信,要么不用。没中间路。
团队部署,别掉链子
团队用AI助手?这事儿更要命。别指望开发者自己想周全,大多出事才醒。
试试:
- 团队配置强制deny list
- 文件系统级挡凭证
- 用临时token,别长效密钥
- 网络控防数据外泄
- 教大家产出和风险不是一回事
总结一句
AI编程助手真香,值用。但没免费午餐。安全控在那儿,就用起来。
今天花15分钟,deny凭证,ask部署,挑个靠谱默认模式。然后安心:它能干活,还被拴住。
“还没出事”绝不是安全策略。醒醒吧。