V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
stinkytofux
6.09D
V2EX  ›  程序员

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

  •  
  •   stinkytofux · Dec 29, 2025 · 5365 views
    This topic created in 123 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    当然没有绝对安全的情况,只能说提高攻击者的攻击成本
    fredweili
        34
    fredweili  
       Dec 30, 2025
    dotenv 这类小工具不是现成的么
    Gilfoyle26
        35
    Gilfoyle26  
       Dec 30, 2025
    啊?有这个问题吗?开发和测试和正式的密钥都是不一样的吧,开发的泄露就泄露呗,怎么会担心这个问题。
    colourfulsai
        36
    colourfulsai  
       Dec 30, 2025
    @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  
       Dec 30, 2025
    @fcfangcc #27 密钥文件放到工程外,然后禁止 AI 进程读取对应目录的权限就行了。不管是放到 home 里然后用其他用户开 AI 进程,还是 systemd 启动 AI 然后 protecthome 都很简单。
    bbao
        38
    bbao  
       Dec 30, 2025
    @sikong31
    @fcfangcc

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

    测试 aksk 在测试环境或许会被拿到,但是生产环境,一定拿不到。 想要生产 aksk ,要么运维提供;要么 ssh 或者 登录 pod 获取 env 拿参数。
    PerFectTime
        39
    PerFectTime  
       Dec 30, 2025
    @lyxxxh2 #9 没有用, 你就算配置了命令禁用了, 那他通过 python/grep/sed 各种其他的命令, 都能读的到
    bbbblue
        40
    bbbblue  
       Dec 31, 2025
    @lyxxxh2 这个对于 cc 自己的工具调用有效。。但是如果执行的是 bash 或者让 skill 执行 py 脚本 其实形同虚设了...哎
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2518 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 222ms · UTC 12:15 · PVG 20:15 · LAX 05:15 · JFK 08:15
    ♥ Do have faith in what you're doing.