V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Livid
271.91D
572.26D

新电脑 brew install node 之后,一个小设置可以提升对供应链投毒的防御

  •  4
     
  •   Livid ·
    PRO
    · Apr 16 · 7929 views

    vi ~/.npmrc

    然后在里面加入这行:

    min-release-age=7
    
    28 replies    2026-04-28 15:20:56 +08:00
    BanShe
        1
    BanShe  
       Apr 16
    11.x 以上可以
    blank0ken
        2
    blank0ken  
       Apr 16
    7day defence
    JasonEWNL
        3
    JasonEWNL  
       Apr 16   ❤️ 6
    其他工具链可以参考 https://daniakash.com/posts/simplest-supply-chain-defense/#beyond-javascript 汇总。

    比如 uv ( v0.9.17+):
    # pyproject.toml
    [tool.uv]
    exclude-newer = "7d"
    HappyAndSmile
        4
    HappyAndSmile  
       Apr 17
    当大多数人这样做之后,会不会相当于都延迟了开启使用的时间,从而效果没想象中大呢
    crocoBaby
        5
    crocoBaby  
       Apr 17
    贴心小功能,7 天缓冲够了
    lisxour
        6
    lisxour  
       Apr 17
    感觉对大部分人没啥作用,主要是信息差,平时不关注这类信息的给多长时间他们也不知道,就拿我自己为例,青龙面板前段时间爆了个超严重的漏洞,可以任意改密码然后任意登录,还有路径穿越任意读取文件,我中招了 4 个月之后才知道。。。
    lel020
        7
    lel020  
       Apr 17
    @HappyAndSmile 不是所有就行,总有维护者或者特别关心某些库的人一直使用最新版甚至最新内测版, 流行的库就没可能所有人都不跟踪最新版, 那就不会投毒了不被发现,极少有投毒能潜伏七天的,影响力越大的库越不可能潜伏着毒,
    lel020
        8
    lel020  
       Apr 17
    @lisxour 这不是针对旧版漏洞吧,已经发布的版本不能随意下架, 已经上线的漏洞也就只能你自己升级解决了,
    延迟 7 天是解决类似最近 claude code 源码泄露投毒到依赖链里的情况,这种投毒都是一次性的,一下子爆发一下子熄灭,炸到多少算多少,
    XWZCoffee
        9
    XWZCoffee  
       Apr 17
    @HappyAndSmile 别用冷门的库,大的仓库几乎不会有你考虑的这种问题,7 天肯定是够了。
    mrchi
        10
    mrchi  
       Apr 17   ❤️ 2
    @JasonEWNL 补充一下,UV 可以配置在用户级,这样就不需要每个项目单独去配置了。

    路径:~/.config/uv/uv.toml

    直接添加 exclude-newer = "7d" 这一行即可。
    gaojin
        11
    gaojin  
       Apr 17
    可以看看这个项目的设计 https://github.com/jin10086/Buffer7
    subpo
        12
    subpo  
       Apr 17
    安全更新似乎也会延期 7 天?需要取舍
    nyaaar
        13
    nyaaar  
       Apr 17
    小巧思,可以的
    darson
        14
    darson  
       Apr 17
    不觉得所有的供应链投毒能够在 7 天内发现。
    spediacn
        15
    spediacn  
       Apr 18 via iPhone
    难,我觉得得一年,然后让 Gemini 扫一遍
    natsu94
        16
    natsu94  
       Apr 18
    前面的,这是“提升”安全性
    ericterminal
        17
    ericterminal  
       Apr 18   ❤️ 1
    我有个方法,GitHub 有个叫做 Santa 的项目,利用 macOS 的 ESF ,也就是和 Linux 的 eBPF 差不多的那个做文件访问权限,只认进程不认权限,我设置了除了 ssh 自己和相关进程才可以读取~/.ssh 目录,其他的程序,比如 node 如果读的话肯定有“鬼”的,直接在内核层面拦截
    netabare
        18
    netabare  
       Apr 19 via iPhone
    如果把 npm 全部用 pnpm 替代并且禁止 postinstall ,会不会安全很多呢,不过自动安装的东西也有可能会自己调用 npm…
    noahjsn
        19
    noahjsn  
       Apr 19
    @mrchi #10
    没效果
    mrchi
        20
    mrchi  
       Apr 19
    @noahjsn 我试了是可以的呀

    uv-conf-test [ main][?][󰏗 v0.1.0][ v3.14.3(uv-conf-test)]
    ❯ cat ~/.config/uv/uv.toml
    exclude-newer = "7d"

    uv-conf-test [ main][?][󰏗 v0.1.0][ v3.14.3(uv-conf-test)]
    ❯ uv add fastapi
    Resolved 11 packages in 9ms
    Installed 10 packages in 6ms
    + annotated-doc==0.0.4
    + annotated-types==0.7.0
    + anyio==4.13.0
    + fastapi==0.135.3
    + idna==3.11
    + pydantic==2.12.5
    + pydantic-core==2.41.5
    + starlette==1.0.0
    + typing-extensions==4.15.0
    + typing-inspection==0.4.2

    ---

    fastapi 最新版本 0.136.0 ,安装的 0.135.3 是 4.2 发布的。Pypi: https://pypi.org/project/fastapi/#history
    diudiuu
        21
    diudiuu  
       Apr 19
    还可以再安装 Aikido Safe Chain 自动扫描漏洞
    npm install -g @aikidosec/safe-chain
    safe-chain setup
    liyafe1997
        22
    liyafe1997  
       Apr 20
    本质上还是要做好环境隔离,你这只能防 nodejs 的包被投毒,万一 homebrew 被投毒了呢?
    我的策略是,每一件事都在独立的容器/虚拟机里干,而且因为容器和虚拟机有快照机制,很方便回滚,甚至宿主 OS 和文件系统也自动快照,就算宿主被投毒,也可以一键滚回到以前的版本
    rossroma
        23
    rossroma  
       Apr 20
    @HappyAndSmile #4 那就改成 14d
    noahjsn
        24
    noahjsn  
       Apr 20
    @mrchi #20
    还是不行。你用下面的命令试下呢?

    $ uv init my-demo-project-1
    $ cd my-demo-project-1/
    $ uv venv
    $ source .venv/bin/activate
    $ uv add fastapi
    Resolved 11 packages in 11ms
    ...
    + fastapi==0.136.0
    mrchi
        25
    mrchi  
       Apr 20
    mrchi
        26
    mrchi  
       Apr 20
    @noahjsn 用了你的命令测试也是 OK 的。(中间有个报错,因为我用的是 fish shell ,激活虚拟环境时要用 fish 脚本)

    ~/PlayGround
    ❯ cd my-demo-project-1/

    my-demo-project-1 [ main][?][󰏗 v0.1.0][ v3.9.6]
    ❯ uv venv
    Using CPython 3.14.3
    Creating virtual environment at: .venv
    Activate with: source .venv/bin/activate.fish

    my-demo-project-1 [ main][?][󰏗 v0.1.0][ v3.9.6]
    ❯ source .venv/bin/activate
    .venv/bin/activate (line 26): Unsupported use of '='. In fish, please use 'set _OLD_SCRIPT_PATH "$SCRIPT_PATH"'.
    _OLD_SCRIPT_PATH="$SCRIPT_PATH"
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    from sourcing file .venv/bin/activate
    source: Error while reading file '.venv/bin/activate'

    my-demo-project-1 [ main][?][󰏗 v0.1.0][ v3.9.6]
    ❯ source .venv/bin/activate.fish

    my-demo-project-1 [ main][?][󰏗 v0.1.0][ v3.14.3(my-demo-project-1)]
    ❯ uv add fastapi
    Resolved 11 packages in 3.69s
    Prepared 2 packages in 1.99s
    Installed 10 packages in 16ms
    + annotated-doc==0.0.4
    + annotated-types==0.7.0
    + anyio==4.13.0
    + fastapi==0.135.3
    + idna==3.11
    + pydantic==2.13.0
    + pydantic-core==2.46.0
    + starlette==1.0.0
    + typing-extensions==4.15.0
    + typing-inspection==0.4.2
    player3
        27
    player3  
       Apr 26
    尝试了这个设置,使用良好。
    然后今天出现 codex 死活升级不到 0.125.0 ,一直是 0.121.0 ,排查了半天发现是这配置导致的。
    现在的 ai 工具一天发几个版本,大家有遇到无法升级可以参照下。😂
    kasusa
        28
    kasusa  
       Apr 28
    @HappyAndSmile 实际上肯定不会大多数人都这么配置。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1821 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 160ms · UTC 16:17 · PVG 00:17 · LAX 09:17 · JFK 12:17
    ♥ Do have faith in what you're doing.