一切從「免費」開始
兩週前,我們做了一個決定:推出免費 AI 模型,讓更多使用者體驗 Reverie。
那天晚上,團隊開了幾罐百事可樂慶祝。(對,指定百事。)
我們拿著鋁罐乾杯,一邊看著使用者註冊數即時往上跳。有人叫出了成長預測圖。氣氛很好。
72 小時後,我們終於明白為什麼有經驗的創辦人總是看起來有點累。
接下來是一連四波的攻擊,簡直像遊戲裡的 Boss Rush——只不過我們是邊挨打邊摸索機制。
但先講最重要的事:你的帳號資料、對話內容和個人資訊從來沒有外洩。現在很安全,以後也會一直安全。 我們有專職的資安團隊 24/7 監控,而這些攻擊瞄準的是我們的資源和荷包,不是你的資料。攻擊者要的是我們的頻寬和錢——你和 AI 夥伴的對話從來沒有陷入風險。
好,接下來讓我們說說到底發生了什麼。
第一波:爬蟲大軍
發生了什麼
開放免費的第二天。晨會。工程師隨口提了一句:「欸,我們的角色 API 昨天的請求量多了好幾百倍。」
我們:「哇,免費上線真的很成功!」
工程師:「……但 DAU 幾乎沒動。」
尷尬的沉默。
我們一頭鑽進日誌,發現有爬蟲正在有系統地收割我們的公開角色資料。名稱、簡介、頭像——這些公開可見的資訊,全被機器人一口氣吸走。
先說清楚:角色的核心描述、性格設定和其他創作者的私人內容從未外洩——只有創作者本人看得到這些。但就算只是公開資訊被工業規模地爬取,對一心想打造健康平台的我們來說,還是很令人沮喪。
我們如何應對
- 為角色探索加上分頁限制(你可以瀏覽,但沒辦法把整個角色庫下載回家)
- 部署智慧型速率限制,分得出「熱情的使用者」和「絕對是機器人」
- 建立行為分析,偵測並封鎖爬蟲模式
- 替確認的不肖分子準備了一些……姑且稱為「創意回應」的東西
我們學到了什麼
「開放平台」不等於「吃到飽自助餐」。即使是公開可見的內容,也該有合理的存取界線。我們希望使用者發現角色——而不是讓人一夜之間建好一個競爭對手的資料庫。
第二波:頻寬刺客
發生了什麼
爬蟲的漏洞才剛補完,第二波就來了。而且這次直接衝著荷包來。
有人摸清了我們的媒體網址,開始大量下載平台上的每一張圖片和每一部影片。角色肖像、生成的影片。只要有副檔名的東西,全都被以最快速度拉走。
我們當時用的是某家大型雲端服務商的 OSS 服務,按頻寬計費。當時看起來很合理。
星期一早上。財務打開雲端主控台,帳單儀表板開始載入。
他的表情:😐
儀表板載入完成:😮
看到實際的數字:😱
「那個……我們現在的頻寬帳單,已經比三個月的資金跑道還高了。」
Slack 頻道瞬間鴉雀無聲。有人緊張地提議乾脆把 CDN 關掉。另一個人指出,那樣整個平台也會跟著關掉。
我們如何應對
緊急搬遷。目的地:Cloudflare R2 和 Cloudflare Stream。
在這裡我們一定要正式感謝 Cloudflare——R2 零輸出流量費的政策救了我們一命。當你眼睜睜看著帳單每小時多出好幾百美元,「沒有輸出流量費」就會變得非常、非常切身。
搬遷花了 30 個小時。睡覺變成選配。凌晨 3 點的程式碼審查自有一種冥想般的意境。
值得嗎?絕對值得。我們的頻寬成本降了 90% 以上,攻擊者的大量下載現在幾乎花不到我們一毛錢。
我們學到了什麼
選擇基礎架構時,別只問「它有多快?」還要問:「如果明天有人攻擊我,我還付得起房租嗎?」
大多數教學都不會提到基礎架構規劃的這個面向。但它們應該要提。
第三波:DDoS 駕到
發生了什麼
頻寬的狀況終於穩定下來。團隊士氣慢慢回升,晨會上甚至有人開了個玩笑。一切看起來都在好轉。
然後 DDoS 來了。
想像一下打開消防水管,對準一個紙杯。我們的資料庫連線池就是那個紙杯。每秒好幾千個請求,全都要最新的資料,全都不肯走快取,全都打在需要查詢資料庫的端點上。
我們的監控儀表板看起來就像心臟病發作的心電圖。回應時間從 200ms 飆到 20 秒,接著直接逾時。使用者開始回報錯誤。我們的 AWS 帳單開始上演每隔幾分鐘就跳出一個更大數字的戲碼。
資料庫連線池達到上限。查詢開始排隊,佇列開始塞車。教科書等級的連鎖故障,就在我們眼前即時上演。
我們如何應對
我們把知道的每一種快取技術都砸了上去:
- ISR(增量靜態再生)——熱門頁面現在會預先渲染,從邊緣節點提供。資料庫根本不知道這些請求存在。
- 多層快取——回應快取、查詢快取、連線池最佳化。只要資料不是非得最新不可,就一律快取。
- 資料庫查詢最佳化——有些原本要 500ms 的查詢,現在只要 50ms。佔用連線的時間越短 = 可用的連線越多。
- Cloudflare 的 DDoS 防護——終於把那些一直說「之後再設定」的安全功能全部打開了
- 智慧型速率限制——正常使用者暢行無阻;攻擊流量請自便
核心理念:如果一個請求不碰資料庫就能回應,那它就不該碰資料庫。
我們學到了什麼
快取不只是效能最佳化——它也是資安架構。攻擊來襲時,快取的回應會吸收衝擊,資料庫得到保護,網站也能維持上線。
還學到一件事:「資安之後再好好設定」這種想法,很快就會付出代價。
第四波:佔便宜大隊(API 濫用者)
發生了什麼
這一波並沒有直接威脅我們的基礎架構。它威脅的是我們的預算。
我們做了好多很棒的免費 AI 功能:
- AI 建立角色——描述你的角色,AI 生成完整的角色資料
- AI 生成時刻——在 AI 協助下打造生動的故事時刻
- AI 建立插件——用自然語言打造角色插件
我們的願景很美好:降低創作門檻,讓每個人都能體驗 AI 輔助創作的魔力,讓平台更容易親近。
但有人的願景不太一樣:「免費 API?那我寫個腳本呼叫它一萬次好了。」
我們看著 AI Token 用量儀表板往上爬。一直爬。一直爬。圖表看起來像一根曲棍球桿,只不過這根球桿是用從我們銀行帳戶流出去的錢做成的。
每一次 AI 生成都要花真金白銀——呼叫語言模型的 API 可不是免費的。看著成千上萬的自動化請求燒掉我們的 AI 預算,感覺就像盯著一輛一直在原地繞圈的計程車跳表。你知道一定很貴,而且它永遠不會停。
最糟的是什麼?這些甚至不是真正的使用者在創作真正的內容。只是……有人在測試自己能撈走多少免費資源。生成出來的角色是一堆亂碼,時刻毫無意義。純粹的浪費。
我們如何應對
我們懷著沉重的心情,為這些 AI 功能加上了點數門檻。
這個決定真的很痛。我們花了好幾週打造這些工具,就是為了讓創作更容易上手。現在卻得替它們標上價格——不是因為我們想,而是因為無限制的免費使用被拿來當成對付我們的武器。
我們盡量做到公平:
- 正常使用所需的點數非常少
- 新使用者會獲得免費點數
- 核心聊天體驗維持免費
- 只有耗用大量資源的 AI 生成需要點數
但還是一樣。感覺就像替一扇我們想一直敞開的門裝上了鎖。
我們學到了什麼
「免費」是一種商業模式,不是一種道德立場。
我們仍然相信普及,仍然想降低門檻。但「對所有人無限免費」只有在所有人都抱持善意時才行得通。當有心人士利用這份慷慨,慷慨的系統就會難以為繼——最後誰都拿不到任何東西。
合理的限制不代表不信任使用者,而是在保護一個服務所有使用者的生態系。另一個選項——乾脆把功能全部關掉——對所有人都更糟。
有時候,保護公共空間就得築起一些圍籬。
你的資料很安全(讓我們說得再清楚不過)
關於這一點,我們想說得毫不含糊:
這些攻擊衝著資源而來,不是資料。 攻擊者想要的是:
- ✅ 我們的頻寬(用來下載內容)
- ✅ 我們的運算資源(用來癱瘓伺服器)
- ✅ 我們的錢(用來榨乾 AI 預算)
他們沒有存取到:
- ❌ 使用者帳號
- ❌ 對話紀錄
- ❌ 個人資訊
- ❌ 付款資料
- ❌ 任何私人資料
我們有專職的資安團隊 24/7 監控真正的資安威脅。使用者資料在儲存和傳輸時都經過加密。存取控管很嚴格,身分驗證也很穩固。那些寫不成精彩部落格文章、枯燥卻重要的資安工作——我們全都有在做。
沒有任何一筆使用者資料外洩。 我們之所以能這麼有把握,是因為我們記錄了一切、分析了一切、驗證了一切。攻擊者從我們這裡拿到的只有頻寬帳單和頭痛。從你那裡,他們什麼都沒拿到。
你的角色、你的對話、你的創作——全部安全、全部完好,全都好好待在該在的地方。
為什麼要告訴你這些
你可能會好奇:為什麼要公開分享這些?這樣不是顯得我們很脆弱嗎?
我們認真想過這件事。
透明建立信任
我們請使用者把一些很有意義的東西託付給我們——他們的創作、他們與 AI 角色之間的情感連結、他們的對話。這份信任,需要我們對自己面臨的挑戰保持誠實。
老套的做法是把問題藏到爆開為止,再發一則含糊的「我們遇到了一些技術問題」聲明。我們寧可開誠布公:這是發生的事,這是我們的處理方式,這是我們學到的教訓。
其他開發者可以借鏡
我們不是第一個推出免費功能後被攻擊的小團隊,也不會是最後一個。如果我們花大錢換來的教訓能幫別人做好更充分的準備,那對整個生態系都是好事。
就當作是我們替「創業學校不會教的事」這門課貢獻的一份教材吧。
你有權知道
有些使用者在這幾週發現回應變慢了,有些發現部分功能現在需要點數。你值得一個解釋——不是企業公關話術,而是真實的經過。
我們一直在奮戰,努力讓平台維持運作。我們在壓力下做了艱難的決定,其中有些影響了你的使用體驗。你應該知道原因。
接下來呢
我們不只是在補漏洞——我們正在打造一個更有韌性的平台:
已經完成:
- 以邊緣優先架構實作的多層快取(你的請求變快了,我們也更難被攻擊)
- 搭配行為分析的智慧型速率限制(機器人會被擋下,人類完全無感)
- Cloudflare 完整資安套件(終於好好設定了,而不是「之後再說」)
- 耗用大量資源的 AI 功能改用點數制(可長可久的慷慨)
即將推出:
- 更強的異常偵測(更早抓到攻擊)
- 地理位置最佳化(讓各地的每個人都更快)
- 更精密的濫用防範(搶先有心人士一步)
不會改變的事:
- 我們會盡力維持免費方案——但它可能不穩定,也可能在未事先通知的情況下調整
- 使用者資料的隱私與安全——永遠是我們的第一優先
- 透明溝通——如果出了什麼問題,你一定會知道
給其他開發者的一些話
如果你正在打造一個開放平台,以下是我們花了真金白銀(和真實的壓力)換來的教訓:
- 速率限制不是選配——從第一天就要做,而不是等到「我們正在被攻擊」的那天
- 選擇抗攻擊的基礎架構——Cloudflare 真的很棒;輸出流量費會把你壓垮
- 積極使用快取——它是兼顧效能與資安的雙重盾牌
- 免費功能需要界線——無限的善意,會被無限多的有心人士利用
- 監控一切——越早發現異常,損失就越小
- 預留緊急預算——你永遠不知道下一波什麼時候來
還有,或許也是最重要的一點:
- 別愛面子而不敢求助——獨立開發者社群比你想像的更願意伸出援手
希望你不必像我們一樣付出昂貴的代價才學到這些。但如果真的遇上了,請記得你並不孤單。
給我們的使用者
被攻擊是一種很奇妙的體驗。
就像你花了好幾個月布置一間溫馨的客廳,把家具擺得恰到好處,準備好零食,再發邀請函給所有朋友。開幕當晚到了,朋友們也來了——太棒了!
但同時:一群你從來沒見過的人開著搬家卡車出現,想把你的沙發拆走、把你家每個角落都拍下來,還不知怎麼地在廚房裡放了幾把小火。
我們有其他選擇。我們可以把門焊死、改成邀請制、要求每個人在看到任何東西之前先證明自己不是機器人。
但我們沒有這麼做。
我們換上了更好的鎖,請了更聰明的保全,也訂下了合理的家規。因為來到 Reverie 的絕大多數人,都是為了創作、交流和享受而來。 我們不會因為少數人的惡行而懲罰多數人。
派對繼續,大門依然敞開。我們只是更會認出那些開著搬家卡車來的人了。
謝謝你們
謝謝每一位在載入變慢、需要點數的這段期間仍然陪著我們的使用者:謝謝你們。
謝謝每一位選擇回報問題,而不是直接離開的人:謝謝你們。
謝謝分享建議和實戰經驗的獨立開發者社群:謝謝你們。
謝謝 Cloudflare:謝謝你們。 🙏
我們現在更強大、更有韌性,也經過了實戰考驗。從這些攻擊中走出來的平台,比走進去之前的那個更好。
下次寫信給你們時,我們希望是要宣布一個令人興奮的新功能。
而不是又打倒了一個 Boss。
不過話說回來——如果又有 Boss 出現,我們也搞得定。
下次更新見。💙
Reverie 團隊
2025 年 12 月

