
這兩個月,Zeabur 被駭兩次後宣布收攤,91APP 的資料庫被自動化攻擊,PHP 和 Node.js 接連修補重大漏洞,Railway 說環境變數可能被人解密拿走,新光三越也通報約 2 萬名顧客資料外洩。我的感想很簡單:做得再完善都可能漏。所以真正要想的是,哪些資料放上去了,萬一漏了,損失能不能壓到最低。
這兩個月發生了什麼
這些事件裡,有新創、有上櫃公司、有百貨龍頭、有全球最多網站在用的開源軟體,還有把資料加密存放的平台,最後一樣出事。
| 日期 | 事件 | 漏掉或曝險的是什麼 | 我看到的重點 |
|---|---|---|---|
| 10/22 | 新光三越 內部監測發現系統遭外部入侵 | 約 2 萬名宅配訂單顧客的姓名、地址、電話 | 由自家監測機制發現,主動通報並通知受影響顧客防詐;外洩範圍只到宅配資料 |
| 10/21 | Railway 偵測到存放客戶環境變數的系統遭異常存取 | 加密過的環境變數,其中一部分被解出內容(API 金鑰、資料庫與映像倉庫帳密) | 有加密也不保證安全。官方暫停所有部署、請所有用戶換金鑰,10/22 再把所有 Railway API 權杖作廢;根本原因還沒公布 |
| 10/21 | Node.js 一次修補 10 個漏洞,4 個高風險 | 內建的 Brotli 解壓縮程式有記憶體越界寫入,官方說可能被遠端執行程式 | 程式用 fetch() 抓到 Brotli 壓縮的回應就會自動解壓縮;Node.js 20 以前已停止支援,不會修。截至 10/22 還沒有實際攻擊的報告 |
| 10/20 到 10/21 | PHP 公布兩個重大漏洞(通稱 PHP2Shell),嚴重度 9.2 分 | 不用登入就能遠端執行程式、接管伺服器 | 在已知後端語言的網站中約 69.3% 使用 PHP,WordPress 也在內。Amazon 在公布前四天(10/17)就看到攻擊嘗試,現在已被大規模利用 |
| 10/3 到 10/22 | 91APP 一座訂單資料庫遭 AI 自動化滲透工具入侵 | 訂單資訊,不含信用卡;詐騙信裡出現真實姓名、電話、地址與訂單內容 | 駭客從一個沒更新的內部工具(Appsmith)進來,再從 GitLab 拿到資料庫金鑰。10/3 被入侵、10/14 才阻斷、10/16 才公告;董事長承認 10/8 就該先提醒品牌,並承諾補償消費者財損 |
| 8/27 與 10/14 | Zeabur 兩度遭駭,10/17 宣布 12/31 前停止營運 | 第二次約 32 萬個帳號、約 320 萬筆環境變數;第一次已有用戶的 AI API 金鑰被盜刷 | 內部憑證以明文存放,管理權杖從 2024 年 1 月建立後沒有到期日、也從沒換過,八月出事後仍沒輪換 |
PHP 這次嚴重到日本首相高市早苗親自在 X 上呼籲,網站如果來不及更新,暫時關站也是降低風險的方法。
我的想法:資安不只是防守題,也是停損題
很多人談資安,第一個想到的是「怎麼不被駭」。這當然要做,但這幾起事件告訴我們,再大的公司、再老牌的軟體,就算資料有加密,還是會漏。Railway 的環境變數明明是加密存放,官方還是說有一部分被解出內容。
而且 AI 讓這件事變得更快。PHP 的漏洞是研究人員用 AI 挖出來的,91APP 則是被 AI 自動化滲透工具打進去的。找洞的速度變快,留給我們修補的時間就變短。
所以我覺得要多想一題:萬一漏了,會怎樣?就像開車繫安全帶,不是因為你打算出車禍,而是車禍不是你能完全控制的。
我自己也有用 AI 開發的工具站,這幾天看新聞特別有感。我把它整理成五個問題,不管你是用 WordPress 架站,還是用 AI 寫程式,都可以拿來檢查自己:
- 這筆資料一定要放上去嗎? 沒收的資料,永遠不會漏。
- 漏了會被拿去做什麼? 盜刷、詐騙、冒用登入,嚴重程度差很多。
- 能不能讓它漏了也沒用? 雜湊、加密、遮蔽、去識別化。
- 能不能讓損失有上限? 花費配額、最小權限、到期日。
- 出事時多久會知道、多快換得掉? 有沒有清單,知道去哪裡撤銷。
先盤點:哪些東西放上去了,漏了會怎樣
第一步不是買資安產品,而是拿一張紙把網站上有的東西列出來,一項一項問「漏了會怎樣」。
| 放在網站或平台上的東西 | 漏了會怎樣 | 降低損失的做法 |
|---|---|---|
| AI 服務的 API 金鑰(OpenAI、Claude、Gemini) | 被拿去盜刷,或在地下市場轉賣 | 一個專案一把金鑰,每把設每月花費硬上限,定期更換 |
| 會員姓名、電話、地址、訂單 | 被詐騙集團拿去冒名發信、打電話 | 少收、定期刪,後台顯示時遮蔽,分析用的資料改成匿名代號 |
| 會員登入密碼 | 被拿去其他網站「撞庫」登入 | 只存雜湊值(bcrypt 或 Argon2),絕不存明文 |
| 資料庫帳密、雲端管理金鑰 | 整個系統被拿走,資料一次全帶走 | 資料庫不開公網,權限給到剛好就好,金鑰設到期日並輪換 |
| 信用卡號 | 盜刷,還要負法律責任 | 不要自己存,交給金流商處理 |
| 後台管理員帳號 | 網站被竄改、被植入後門 | 開兩步驟驗證,不用 admin 當帳號,離職人員帳號立刻停用 |
Zeabur 第二次事件範圍會這麼大,就是「資料庫帳密、雲端管理金鑰」這一列沒做好:憑證明文存放、權杖沒有到期日,出過一次事也沒換。
91APP 也是同一種連鎖:一個沒更新的內部小工具被打穿,駭客在 GitLab 裡找到資料庫金鑰,最後拿走整座訂單資料庫的資料。每一關單獨看都不大,串起來就是一次大外洩。
給一般人:用 WordPress 架站的你
用 WordPress 不用懂程式,但有六件事一定要做,而這次的 PHP 漏洞就是第一件。
- 先更新 PHP 和 WordPress。 PHP 官方 10/21 已釋出 8.5.12、8.4.27、8.3.36、8.2.35 修補版,8.1 以前的版本已經沒有官方安全更新。不知道自己是哪一版,直接問主機商。WordPress 本身今年 7 月也修過一組可以遠端接管網站的漏洞(wp2shell),自動更新記得打開。要特別注意的是,Amazon 在 PHP 漏洞公布前四天(10/17)就看到攻擊嘗試,現在已經被大規模利用,所以更新完還要回頭檢查 10/17 之後有沒有異狀,例如多了不認識的管理員帳號,或 uploads 資料夾裡出現 .php 檔。網路上流傳的設定調整只能降低風險,更新才是唯一完整的修補。
- 外掛能少就少。 每多一個外掛就多一扇門。用不到的直接刪除,只停用不算數。
- AI 外掛的金鑰要另外給。 很多人在 WordPress 裝了 AI 寫文章、AI 客服外掛,把 OpenAI 或 Gemini 的金鑰貼進去。這把金鑰通常就存在網站的資料庫裡,網站被打穿,金鑰就一起被帶走。請給這個外掛一把專用金鑰,並在 AI 平台後台設好每月上限,例如 20 美元。
- 會員資料少收、定期清。 表單只問真的需要的欄位,生日、身分證字號沒必要就別收。WooCommerce 的「帳號與隱私」設定裡有個人資料保留的選項,可以設定不活躍帳號和舊訂單多久後自動清除。表單外掛收到的留言,也別一直堆在網站裡。
- 密碼交給系統雜湊,管理員開兩步驟驗證。 WordPress 從 6.8 版開始改用 bcrypt 存密碼,就算資料庫被拿走,也很難反推出原本的密碼。前提是你有更新,而且沒有外掛自己另外存密碼。
- 備份放在網站以外的地方。 備份和網站放在同一台主機,主機出事就一起沒了。
如果你是用 91APP 這類開店平台的品牌,平台的資安你管不到,但有兩件事你管得到:要求消費者留哪些資料,以及出事時多快通知客戶。91APP 這次從 10/3 被入侵到 10/16 公告,中間將近兩週,很多品牌是先接到消費者反映詐騙信才知道出事。建議先準備好一份反詐騙公告範本,出事當天就能發出去;合約裡也可以先談好,平台出事要在多久內通知你。
給 AI 開發者:用 AI 寫程式、部署服務的你
用 AI 開發最大的風險,是東西做得出來,但金鑰放在哪裡、誰拿得到,自己說不清楚。
一、金鑰絕對不要進前端
2026 年 4 月有一份研究掃了 1,072 個用 Lovable、v0、Bolt 這類工具做的網站,98% 有資安問題。其中 39 個網站的資料表,任何人拿網頁裡公開的 Supabase 金鑰就能整張讀出來。另一份研究統計 vibe coding 網站外洩的 AI 金鑰,Gemini 金鑰就占了七成以上。
做法很簡單:AI 金鑰只放後端,前端一律透過你自己的 API 轉呼叫。用 Supabase 的話,每張資料表都要開 RLS。
二、每個專案一把金鑰,每把金鑰一個硬上限
金鑰被偷之後最常見的下場,就是被拿去盜刷或轉賣,業界叫它 LLMjacking。有報導指出,被偷的 AI 金鑰在地下市場最低約 30 美元就買得到;Railway 也說這次攻擊是衝著 AI 推論服務來的。好消息是,三大平台現在都能設硬上限:
| 平台 | 在哪裡設 | 要注意的地方 |
|---|---|---|
| OpenAI | 組織或專案的 Limits,打開 Enforce a hard limit | 2026 年 7 月才推出硬上限,超過會回 429 錯誤;狀態傳遞有時間差,實際花費可能略超 |
| Anthropic(Claude) | Claude Console 的組織與 Workspace 的 Spend limits | Default workspace 不能單獨設,跟著組織上限走;到上限後停到下個月 1 號 |
| Google Gemini | Google AI Studio 專案的 Spend 分頁,Monthly spend cap | 2026 年 3 月推出,生效約有 10 分鐘延遲 |
上限要設在「被盜刷了我也承受得起」的金額,而不是一個這輩子都用不到的天花板。
三、平台上的環境變數不是保險箱,要能隨時換掉
Zeabur 和 Railway 被拿走的,都是使用者存在平台上的環境變數。你沒辦法保證平台不出事,但可以做到出事時一小時內全部換完。
- 列一張金鑰清單:哪把金鑰、用在哪個專案、存在哪個平台、去哪裡撤銷。
- 換金鑰要先撤銷舊的,再產生新的。只建新的不撤舊的,等於沒換。
- 金鑰盡量設到期日。Zeabur 第二次就是被一把從沒換過、也沒有到期日的管理權杖打開的。
- 金鑰不要寫進 Git 倉庫,私有倉庫也一樣。91APP 的駭客就是在 GitLab 裡找到資料庫金鑰。
- 不要把正式環境的最高權限金鑰交給 AI 代理人,給它測試用、有額度上限的那把就好。
四、資料庫裡的個資:能雜湊就雜湊,能拆開就拆開
- 密碼用 bcrypt 或 Argon2 雜湊,不要自己發明加密方式,也不要讓 AI「先存明文,之後再處理」。
- 手機、地址、身分證這類欄位,加密後再存,或拆到獨立的資料表另外管權限。這就是正規化在資安上的好處:個資集中在一張表,要鎖、要刪都好處理。
- 拿來做分析、丟給 AI 整理的資料,先把姓名、電話換成匿名代號。
- 資料庫不要開公網,只讓自己的後端連得進來。
五、Node.js、Next.js 這些底層也要跟著更新
用 AI 做的專案很多跑在 Node.js 上,前端常用 Next.js,這兩個這個月都出了重大漏洞。AI 幫你生出來的專案不會自己更新,版本要你自己顧。
- Node.js(10/21):一次修 10 個漏洞,最嚴重的是內建的 Brotli 解壓縮程式,官方說可能被遠端執行程式。程式只要用 fetch() 抓到 Brotli 壓縮的回應就會自動解壓縮。請升級到 22.23.4、24.22.1 或 26.12.1;Node.js 20 以前已經停止支援,不會有修補,要直接換到新的版本線。
- Next.js(10/14):兩個嚴重度 9.5 的漏洞,不用登入就能遠端執行程式,其中一個跟 SVG 圖片處理有關。請升級到 16.4.1 或 15.5.28,然後重新部署。
- 用 Docker 部署的,要把基底映像換成新版本再重新建置。只按重啟,跑的還是舊版。
- 自己架的內部小工具(管理後台、n8n、Appsmith 這類)也要定期更新,而且不要開在公網上。91APP 就是從一個沒更新的內部工具被打進來的。
六、讓 AI 幫你做一次資安健檢
AI 會寫出有洞的程式,但它也很會抓洞。上線前,可以把下面這段提示詞丟給 Claude Code、Cursor 或 Codex:
請以資安稽核的角度檢查這個專案,列出問題清單與修正建議:
1. 搜尋所有寫死在程式碼、設定檔、註解裡的 API 金鑰、密碼、資料庫連線字串
2. 檢查前端打包後的檔案,是否含有任何不該公開的金鑰
3. 檢查使用者密碼是否以 bcrypt 或 Argon2 雜湊儲存
4. 列出資料庫中所有含個資的欄位,標出哪些沒有加密或遮蔽
5. 檢查資料庫是否對外開放,Supabase 每張資料表是否開啟 RLS
6. 檢查 .env 是否已列入 .gitignore,Git 歷史紀錄裡是否曾經提交過金鑰
7. 檢查 Node.js、Next.js 與所有套件的版本是否有已知漏洞(可先執行 npm audit),列出需要升級的項目
請依嚴重程度排序,先不要修改任何檔案。
真的出事那天,先做這幾件事
收到平台通知或看到帳單暴增,先止血再查原因,順序很重要。
- 撤銷舊金鑰,再產生新的。 到 OpenAI、Anthropic、Google 等後台處理,這些金鑰拿到哪裡都能用,損失最直接。
- 資料庫密碼要先在資料庫裡改。 改完再更新平台上的環境變數並重啟服務。只改變數的話,資料庫的實際密碼沒變,攻擊者手上的舊密碼照樣能登入。
- 從可能被入侵的那天開始查,不是從公告那天。 PHP 這次在公布前四天就有人試著攻擊,Amazon 建議至少從 10/17 開始往後查;91APP 也是 10/3 就被入侵,兩週後才確認。
- 查用量和帳單,截圖留證。 Zeabur 的賠償就是依用戶提出的盜用證明逐一核實,沒有證據就很難申請。
- 先通知,再慢慢查清楚。 91APP 董事長事後也承認,10/8 成立緊急小組時就該先提醒品牌;新光三越則是自家監測發現後,就主動通知受影響顧客防詐。消費者早一天知道,就少一天被騙的機會。
- 漏的是客戶個資,就要依法通報。 個資法修法後,違反安全維護義務的罰鍰最高可到 1,500 萬元;2025 年 11 月公布的修正條文也把向個資保護委員會通報寫進法條,施行日期由行政院另定。法律細節建議請教律師。
最後
這幾起事件提醒我,資安不是做到滿分就沒事,而是先承認總會有漏的那一天。差別在於那天來的時候,你損失的是 20 美元還是 20 萬;是換一把金鑰就好,還是要一個一個打電話跟客戶道歉。
與其一直問「我的網站會不會被駭」,不如今天就花半小時,把網站上有的東西列出來,一項一項問自己:漏了會怎樣?
參考資料
- Zeabur shutting down after second security breach in two months|BleepingComputer
- Zeabur 第二次資安事件與停止營運拆解|恆遠數位科技
- 雲端部署平台 Zeabur 遭駭,使用者 API 金鑰、資料庫憑證外流|TechNews 科技新報
- 台灣新創 Zeabur 資安事件更新:63% 賠償申請已核實|鏈新聞
- 91APP 公布遭自動化攻擊階段調查 承諾補償消費者財損|經濟日報
- 91APP 詐騙信風暴始末|遠見雜誌
- 91APP 資料庫遭未授權存取 數發部:釐清個資影響範圍|中央社
- 91APP 遭駭引發資安疑慮!品牌遭冒名發詐騙訊息|自由時報 3C 科技
- 新光三越啟動資安防護應變!宅配顧客個資受影響|聯合新聞網
- 新光三越系統遭駭!2 萬名顧客資料外洩|知新聞
- 連高市早苗都親自示警!PHP 爆重大漏洞|TechNews 科技新報
- PHP 網站爆重大漏洞!全球近 7 成網站中獎|NOWnews
- Amazon Threat Intelligence identifies PHP2Shell exploitation prior to public disclosure|AWS Security Blog
- Node.js Brotli Decoder Bug Could Allow Remote Code Execution|The Hacker News
- Next.js Ships Out-of-Band Patch for Two Critical RCE Flaws|The Hacker News
- Security Disclosure: Wednesday October 21st|Railway Blog
- Railway urges all users to revoke secret keys after cyberattack|TechCrunch
- Spend limits|OpenAI API Docs
- How to Set Spend Limits in Claude Console|XRay
- More transparency and control over your Gemini API costs|Google Blog
- LLMjacking is draining AI budgets|Hugging Face Blog
- We Scanned 1,072 Vibe Coded Apps|Symbiotic Security
- Secrets Leaking Through Vibe Coded Sites|RedHunt Labs
- WordPress 6.8 will use bcrypt for password hashing|Make WordPress Core
- 總統公布「個人資料保護法」修正條文|理律法律事務所