Livid
403.84D
562.55D

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

  •  4
     
  •   Livid ·
    PRO
    · Apr 16 · 9509 views
    This topic created in 202 days ago, the information mentioned may be changed or developed.

    vi ~/.npmrc

    然后在里面加入这行:

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

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

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

    直接添加 exclude-newer = "7d" 这一行即可。
    gaojin
    gaojin
    Apr 17
    11
    可以看看这个项目的设计 https://github.com/jin10086/Buffer7
    subpo
    subpo
    Apr 17
    12
    安全更新似乎也会延期 7 天?需要取舍
    nyaaar
    nyaaar
    Apr 17
    13
    小巧思,可以的
    darson
    darson
    Apr 17
    14
    不觉得所有的供应链投毒能够在 7 天内发现。
    spediacn
    spediacn
    Apr 18 via iPhone
    15
    难,我觉得得一年,然后让 Gemini 扫一遍
    natsu94
    natsu94
    Apr 18
    16
    前面的,这是“提升”安全性
    ericterminal
    17
    我有个方法,GitHub 有个叫做 Santa 的项目,利用 macOS 的 ESF ,也就是和 Linux 的 eBPF 差不多的那个做文件访问权限,只认进程不认权限,我设置了除了 ssh 自己和相关进程才可以读取~/.ssh 目录,其他的程序,比如 node 如果读的话肯定有“鬼”的,直接在内核层面拦截
    netabare
    netabare
    Apr 19 via iPhone
    18
    如果把 npm 全部用 pnpm 替代并且禁止 postinstall ,会不会安全很多呢,不过自动安装的东西也有可能会自己调用 npm…
    noahjsn
    noahjsn
    Apr 19
    19
    @mrchi #10
    没效果
    mrchi
    mrchi
    Apr 19
    20
    @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
    diudiuu
    Apr 19
    21
    还可以再安装 Aikido Safe Chain 自动扫描漏洞
    npm install -g @aikidosec/safe-chain
    safe-chain setup
    liyafe1997
    22
    本质上还是要做好环境隔离,你这只能防 nodejs 的包被投毒,万一 homebrew 被投毒了呢?
    我的策略是,每一件事都在独立的容器/虚拟机里干,而且因为容器和虚拟机有快照机制,很方便回滚,甚至宿主 OS 和文件系统也自动快照,就算宿主被投毒,也可以一键滚回到以前的版本
    rossroma
    rossroma
    Apr 20
    23
    @HappyAndSmile #4 那就改成 14d
    noahjsn
    noahjsn
    Apr 20
    24
    @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
    mrchi
    Apr 20
    25
    mrchi
    mrchi
    Apr 20
    26
    @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
    player3
    Apr 26
    27
    尝试了这个设置,使用良好。
    然后今天出现 codex 死活升级不到 0.125.0 ,一直是 0.121.0 ,排查了半天发现是这配置导致的。
    现在的 ai 工具一天发几个版本,大家有遇到无法升级可以参照下。😂
    kasusa
    kasusa
    Apr 28
    28
    @HappyAndSmile 实际上肯定不会大多数人都这么配置。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3305 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 98ms · UTC 10:18 · PVG 18:18 · LAX 02:18 · JFK 05:18
    ♥ Do have faith in what you're doing.