V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
stinkytofux
6.09D
V2EX  ›  程序员

AI 编程大行其道, 如何避免项目密钥泄露?

  •  
  •   stinkytofux · 2025 年 12 月 29 日 · 4627 次点击

    问题 1: 因为早先没有意识到. 导致已经在好几个老项目中使用了 claude-code, gemini 这些工具, 所有项目文件都被扫过了. 这些模型会进行数据脱敏吗? 如果密钥泄露了非常棘手啊!

    问题 2: 开始新项目, 怎么避免项目配置文件中的密钥泄露? 有没有比较工程化又简单的方法?

    40 条回复    2025-12-31 02:30:51 +08:00
    pikko
        1
    pikko  
       2025 年 12 月 29 日
    密钥也不放在 git 仓库里的啊
    stinkytofux
        2
    stinkytofux  
    OP
       2025 年 12 月 29 日
    @pikko #1 小公司和我个人的项目也没那么严谨, 像 OSS 这些密钥直接就写配置文件中了. 现在意识到 AI 编程出问题了.
    sentinelK
        3
    sentinelK  
       2025 年 12 月 29 日
    没什么诀窍,无非就是照本宣科:不要硬编码。通过服务获取。

    btw ,即便是最高风亮节的 Anthropic ,也只是声明了不会用用户的数据再训练。
    也就是说,他只能保证你的代码、数据不会被“自己的新模型”吐露给其他用户。但也仅此而已了。
    pikko
        4
    pikko  
       2025 年 12 月 29 日
    @stinkytofux 配置文件读环境变量,另外一个单独的 sh 文件去赋予环境变量。这是常规操作吧。
    WuSiYu
        5
    WuSiYu  
       2025 年 12 月 29 日
    每过几个月换个密钥就行了,就算被当作了训练数据也不会立刻反应到市面的模型中
    94
        6
    94  
       2025 年 12 月 29 日
    直接用官方的 API 其实没必要担心,别人还看不上你这点小东西。使用你的数据去训练也不会说直接把你的密钥吐给其他用户(稍微理解一下原理就不会有这样的困扰了)。
    要是使用的中转站之类的才需要小心,以及一些使用上的引用问题 /t/1175066

    如果使用了 CICD 的话,一般会放到项目仓库的 Secret 里面。后端一般是放到 Nacos 里面配置。
    TArysiyehua
        7
    TArysiyehua  
       2025 年 12 月 29 日
    @stinkytofux 首先你个人项目小公司无所谓了吧?
    然后就是,总是通过服务器,环境变量来读取,现在 AI 变成都是通过 Agent 来编程的,它执行的命令要获取真实的秘钥也并不是什么难事。
    最保险的还是测试密钥跟线上密钥分开
    bbao
        8
    bbao  
       2025 年 12 月 29 日
    1 ,配置文件里目前是不安全的;开发同学不掌握线上或者测试环境任何 key
    2 ,运维部署时,扩写配置文件,由运维侧来维护和统一管理 key ,代码会提交到 git 仓库,只会在服务器中查看配置
    3 ,更安全的方式,通过环境变量的方式进行设置。在部署脚本中维护,代码依旧提交到 git 仓库。(推荐)
    lyxxxh2
        9
    lyxxxh2  
       2025 年 12 月 29 日   ❤️ 3
    .claude/settings.local.json
    设置拒绝读取的文件。
    Msxx
        10
    Msxx  
       2025 年 12 月 29 日 via Android
    我都是丢 github 仓库,项目各种 API 都是跟着仓库跑,靠换 key 解决。
    ratazzi
        11
    ratazzi  
       2025 年 12 月 29 日
    https://mise.jdx.dev/environments
    mise 内置 age 加密
    Aleks
        12
    Aleks  
       2025 年 12 月 29 日
    最佳实践:密钥不能硬编码在项目里,需要配置在部署的环境变量中。
    Amareni
        13
    Amareni  
       2025 年 12 月 29 日 via Android
    AI 给我的建议是配置 Cloudflare Worker(AI 辅助下半小时就配置好➕测试)
    sikong31
        14
    sikong31  
       2025 年 12 月 29 日
    @bbao 具体怎么弄呢?开发不还是需要 key ,总得暴露出来认证吧,环境变量那也是写到文件运行,他就是躺在电脑上。我都用对称加密,但是怕忘记麻烦还是有一份明文密码放 U 盘,现在干脆不用集成的 AI 服务,都自己小片段的用网页 AI ,太麻烦了
    BenjaminSu
        16
    BenjaminSu  
       2025 年 12 月 29 日 via Android   ❤️ 2
    终于有人意识到这个问题了。所以我目前一直坚持聊天编程
    wpblank
        17
    wpblank  
       2025 年 12 月 29 日
    开发环境的项目全部单起一套需要密钥的服务呗。
    uni
        18
    uni  
       2025 年 12 月 29 日
    用 dotnet 吧,自带的 secret manager 才是最佳实践,只要不要不小心在日志里打出来就基本不会有事
    x2ve
        19
    x2ve  
       2025 年 12 月 29 日
    放环境变量或者库里头,测试跟线上分开,这样 ai 读了也没太大影响。
    reallittoma
        20
    reallittoma  
       2025 年 12 月 30 日
    开发环境密钥随便读,部署后换一个就好了。
    gadfly3173
        21
    gadfly3173  
       2025 年 12 月 30 日
    如果是 spring ,把密钥放在 nacos 里之类的配置中心就行了。或者让运维放在容器的 bootstrap.yml 里什么的
    streamrx
        22
    streamrx  
       2025 年 12 月 30 日 via iPhone
    开发和线上又不是一个环境
    busier
        23
    busier  
       2025 年 12 月 30 日 via Android
    密钥也可以设置密码啊
    bk201
        24
    bk201  
       2025 年 12 月 30 日
    私有部署必将盛行
    lysf0515
        25
    lysf0515  
       2025 年 12 月 30 日
    我和我老大说过这个事情,他说无所谓的,没啥事,要泄露早泄露了
    tiancaixiaoshuai
        26
    tiancaixiaoshuai  
       2025 年 12 月 30 日
    本地开个虚拟机,随便找个后端程序,只写一个获取 token 的方法,需要用密钥的时候访问这个后端,比如 192.168.1.2/?action=get_token ,再解析一下 json 不就可以了
    fcfangcc
        27
    fcfangcc  
       2025 年 12 月 30 日
    @bbao 开发环境不知道 key 你怎么测试?本地不测,直接发布到 QA 测吗
    zzxCNCZ
        28
    zzxCNCZ  
       2025 年 12 月 30 日
    一方面,密钥不硬编码在代码中,使用环境变量读取时基操。另一方面,你所有 ide ,插件,各种同步软件只要连上网了,都有泄露风险。
    jsjgjbzhang
        29
    jsjgjbzhang  
       2025 年 12 月 30 日
    你的密钥没那么重要,没有利用价值的看到都懒得动
    cabing
        30
    cabing  
       2025 年 12 月 30 日
    密钥打到 docker 里面,也就是放到运行环境里面,跟代码分离。简答又方便。
    unco020511
        31
    unco020511  
       2025 年 12 月 30 日
    https://cursor.com/cn/docs/context/ignore-files
    其实和 git 一样,一般的 ai coding 都有忽略文件的配置
    然后就是你的密钥部署时是不会出现在源码里的,都在环境变量里
    qiaobeier
        32
    qiaobeier  
       2025 年 12 月 30 日
    @stinkytofux 再小的公司,就算是个人密钥配置文件本地化也是基本要求吧。
    Oilybear
        33
    Oilybear  
       2025 年 12 月 30 日
    - 极度敏感的像 DB 、贵重第三方服务 ak/sk ,走配置中心服务形式下发,开发可见、生产不可见。
    - 极度敏感的像 DB 、高成本服务,能上 VPN 内网隔离就上 VPN 内网隔离,这样外部知道链接密钥也不可用

    当然没有绝对安全的情况,只能说提高攻击者的攻击成本
    fredweili
        34
    fredweili  
       2025 年 12 月 30 日
    dotenv 这类小工具不是现成的么
    Gilfoyle26
        35
    Gilfoyle26  
       2025 年 12 月 30 日
    啊?有这个问题吗?开发和测试和正式的密钥都是不一样的吧,开发的泄露就泄露呗,怎么会担心这个问题。
    colourfulsai
        36
    colourfulsai  
       2025 年 12 月 30 日
    @sikong31 #14 一般来说可以放到类似~/.develop/xxx.json ,然后开发程序加载时读取(可以参考 https://learn.microsoft.com/zh-cn/aspnet/core/security/app-secrets?view=aspnetcore-10.0&tabs=linux )。AI 服务换一个用户运行(无法读取 home 目录),或者是配置禁止 AI 进程读取机密目录。
    colourfulsai
        37
    colourfulsai  
       2025 年 12 月 30 日
    @fcfangcc #27 密钥文件放到工程外,然后禁止 AI 进程读取对应目录的权限就行了。不管是放到 home 里然后用其他用户开 AI 进程,还是 systemd 启动 AI 然后 protecthome 都很简单。
    bbao
        38
    bbao  
       2025 年 12 月 30 日
    @sikong31
    @fcfangcc

    测试环境需要提供 aksk 呀,如果设计之初就被设计成从 env 读取,那么提交代码就不会产生影响,只是在本地 env 设置即可。

    测试 aksk 在测试环境或许会被拿到,但是生产环境,一定拿不到。 想要生产 aksk ,要么运维提供;要么 ssh 或者 登录 pod 获取 env 拿参数。
    PerFectTime
        39
    PerFectTime  
       2025 年 12 月 30 日
    @lyxxxh2 #9 没有用, 你就算配置了命令禁用了, 那他通过 python/grep/sed 各种其他的命令, 都能读的到
    bbbblue
        40
    bbbblue  
       2025 年 12 月 31 日
    @lyxxxh2 这个对于 cc 自己的工具调用有效。。但是如果执行的是 bash 或者让 skill 执行 py 脚本 其实形同虚设了...哎
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2318 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:03 · PVG 00:03 · LAX 08:03 · JFK 11:03
    ♥ Do have faith in what you're doing.