พูดตรงๆ เราถูกโจมตี — แต่ข้อมูลของคุณปลอดภัย

Reverie Team
12/1/2025

ทุกอย่างเริ่มจากคำว่า "ฟรี"
สองสัปดาห์ก่อน เราตัดสินใจ: เปิดตัวโมเดล AI ฟรี เพื่อให้ผู้ใช้มากขึ้นได้สัมผัส Reverie
คืนนั้น ทีมเปิด Pepsi ฉลอง (ใช่ Pepsi โดยเฉพาะ)
เราชนกระป๋องกัน ดูตัวเลขการลงทะเบียนพุ่งขึ้นแบบ real-time มีคนเปิดกราฟคาดการณ์การเติบโต บรรยากาศดีมาก
72 ชั่วโมงต่อมา เราเข้าใจว่าทำไม founder ที่มีประสบการณ์ถึงดูเหนื่อยอยู่เสมอ
สิ่งที่ตามมาคือการโจมตี 4 ระลอกที่เหมือน boss rush — แค่ว่าเราเรียนรู้กลไกไปพร้อมกับถูกตี
แต่ก่อนอื่น สิ่งสำคัญที่สุด: ข้อมูลบัญชี การสนทนา และข้อมูลส่วนตัวของคุณไม่เคยถูกเจาะ มันปลอดภัยตอนนี้และจะปลอดภัยต่อไป เรามีทีมรักษาความปลอดภัยที่เฝ้าดูตลอด 24/7 และการโจมตีเหล่านี้เล็งเป้าไปที่ทรัพยากรและกระเป๋าเงินของเรา ไม่ใช่ข้อมูลของคุณ ผู้โจมตีต้องการ bandwidth และเงินของเรา — การสนทนากับ AI companion ของคุณไม่เคยตกอยู่ในความเสี่ยง
ตอนนี้ มาดูกันว่าเกิดอะไรขึ้น
ระลอก 1: กองทัพ Crawler
สิ่งที่เกิดขึ้น
วันที่สองหลังเปิดฟรี morning standup วิศวกรพูดขึ้นมา: "เฮ้ character API ของเราได้รับ request มากกว่าปกติหลายร้อยเท่าเมื่อวาน"
เรา: "ว้าว การเปิดตัวฟรีกำลังไปได้สวยจริงๆ!"
วิศวกร: "...แต่ DAU แทบไม่ขยับเลย"
ความเงียบที่อึดอัด
เราดำดิ่งลงไปใน log และพบ crawler ที่กำลังเก็บข้อมูล character สาธารณะของเราอย่างเป็นระบบ ชื่อ bio avatar — ข้อมูลที่มองเห็นได้สาธารณะ ถูกดูดไปโดย bot
ให้ชัดเจน: คำอธิบาย character หลัก การตั้งค่าบุคลิกภาพ และเนื้อหาส่วนตัวอื่นๆ ของ creator ไม่เคยถูกเปิดเผย — เฉพาะ creator เท่านั้นที่เห็นได้ แต่แม้แต่การ scrape ข้อมูลสาธารณะในระดับอุตสาหกรรมก็น่าหงุดหงิดเมื่อคุณพยายามสร้างแพลตฟอร์มที่ดี
วิธีที่เราตอบสนอง
- ใส่ pagination limit บน character discovery (browse ได้ แต่ดาวน์โหลดทั้ง library ไม่ได้)
- ใช้ rate limiting อัจฉริยะที่แยก "ผู้ใช้กระตือรือร้น" จาก "bot แน่นอน"
- สร้าง behavioral analysis เพื่อตรวจจับและบล็อก pattern ของ crawler
- เพิ่ม... เรียกว่า "การตอบสนองสร้างสรรค์" สำหรับผู้ไม่ประสงค์ดีที่ยืนยันแล้ว
สิ่งที่เราเรียนรู้
"แพลตฟอร์มเปิด" ไม่ได้หมายความว่า "บุฟเฟ่ต์ไม่จำกัด" แม้แต่เนื้อหาที่มองเห็นได้สาธารณะก็สมควรได้รับขอบเขตการเข้าถึงที่สมเหตุสมผล เราต้องการให้ผู้ใช้ค้นพบ character — ไม่ใช่สร้างฐานข้อมูลคู่แข่งในคืนเดียว
ระลอก 2: นักฆ่า Bandwidth
สิ่งที่เกิดขึ้น
เราเพิ่งอุดรูจาก crawler เสร็จ ระลอกสองก็มา และครั้งนี้ตรงไปที่กระเป๋าเงิน
มีคนหา media URL ของเราเจอและเริ่ม bulk download ทุกรูปภาพและวิดีโอบนแพลตฟอร์ม portrait ของ character วิดีโอที่สร้างขึ้น ทุกอย่างที่มีนามสกุลไฟล์ถูกดึงไปด้วยความเร็วสูงสุด
เราใช้บริการ OSS ของ cloud provider รายใหญ่ ราคาตาม bandwidth ดูสมเหตุสมผลตอนนั้น
เช้าวันจันทร์ ฝ่ายการเงินเปิด cloud console dashboard การเรียกเก็บเงิน load
หน้าเขา: 😐
Dashboard load เสร็จ: 😮
เห็นตัวเลขจริง: 😱
"เฮ้ ก็... ค่า bandwidth ของเราตอนนี้สูงกว่า runway สามเดือน"
Slack channel เงียบมาก มีคนแนะนำอย่างประหม่าว่าปิด CDN ไปเลย คนอื่นชี้ว่านั่นจะปิดทั้งแพลตฟอร์มด้วย
วิธีที่เราตอบสนอง
การ migrate ฉุกเฉิน จุดหมาย: Cloudflare R2 และ Cloudflare Stream
ตรงนี้ เราต้องขอบคุณ Cloudflare อย่างเป็นทางการ — นโยบาย zero egress fee ของ R2 ช่วยเราไว้ เมื่อคุณเห็น bill พุ่งขึ้นหลายร้อยดอลลาร์ต่อชั่วโมง "ไม่มีค่า egress" กลายเป็นเรื่องสำคัญมากๆ
การ migrate ใช้เวลา 30 ชั่วโมง การนอนกลายเป็นทางเลือก code review ตี 3 มีคุณภาพการทำสมาธิบางอย่าง
คุ้มไหม? แน่นอน ค่า bandwidth ของเราลดลงกว่า 90% และการ bulk download ของผู้โจมตีตอนนี้แทบไม่มีค่าใช้จ่าย
สิ่งที่เราเรียนรู้
เมื่อเลือก infrastructure อย่าถามแค่ "มันเร็วแค่ไหน?" ถามด้วยว่า: "ถ้ามีคนโจมตีฉันพรุ่งนี้ ฉันจะยังจ่ายค่าเช่าได้ไหม?"
มิตินี้ของการวางแผน infrastructure ไม่ปรากฏในบทเรียนส่วนใหญ่ แต่ควรจะมี
ระลอก 3: DDoS มาถึง
สิ่งที่เกิดขึ้น
เราเพิ่ง stabilize สถานการณ์ bandwidth ขวัญกำลังใจทีมกำลังฟื้น มีคนพูดตลกใน standup ด้วยซ้ำ สิ่งต่างๆ กำลังดีขึ้น
แล้ว DDoS ก็มา
ลองจินตนาการเปิดสายดับเพลิงแล้วเล็งไปที่แก้วกระดาษ นั่นคือสิ่งที่ database connection pool ของเราประสบ request หลายพันต่อวินาที ทั้งหมดต้องการข้อมูลสด ทั้งหมดปฏิเสธใช้ cache ทั้งหมดตี endpoint ที่ต้อง query database
dashboard monitoring ของเราดูเหมือน EKG ของหัวใจวาย response time จาก 200ms เป็น 20 วินาที แล้วก็ timeout ผู้ใช้เริ่มรายงาน error bill AWS เริ่มทำสิ่งที่อัปเดตทุกไม่กี่นาทีด้วยตัวเลขที่ใหญ่ขึ้น
database connection pool ถึงขีดจำกัด query เริ่มเข้าคิว คิวเริ่มสะสม cascade failure แบบคลาสสิก เกิดขึ้นใน real-time
วิธีที่เราตอบสนอง
เราใช้ทุกเทคนิค caching ที่รู้จัก:
- ISR (Incremental Static Regeneration) — หน้ายอดนิยมตอนนี้ pre-render และ serve จาก edge node database ไม่รู้ด้วยซ้ำว่า request เหล่านี้มีอยู่
- Multi-layer caching — response cache, query cache, connection pooling optimization ถ้าข้อมูลไม่จำเป็นต้องสดจริงๆ มันจะถูก cache
- Database query optimization — บาง query ที่เคยใช้ 500ms ตอนนี้ใช้ 50ms เวลาถือ connection น้อยลง = connection ที่พร้อมใช้มากขึ้น
- DDoS protection ของ Cloudflare — ในที่สุดก็เปิดฟีเจอร์ความปลอดภัยทั้งหมดที่เราตั้งใจจะตั้งค่า "สักวัน"
- Smart rate limiting — ผู้ใช้จริงผ่านได้ traffic โจมตีถูกแสดงทางออก
ปรัชญา: ถ้า request สามารถตอบได้โดยไม่ต้องแตะ database ก็ควรทำ
สิ่งที่เราเรียนรู้
Caching ไม่ใช่แค่ performance optimization — มันคือ security architecture เมื่อการโจมตีมา cached response รับแรงกระแทก database ยังคงได้รับการปกป้อง site ยังคงทำงาน
เรียนรู้ด้วยว่า: "เราจะตั้งค่าความปลอดภัยอย่างถูกต้องทีหลัง" คือปรัชญาที่ไม่ค่อยดีตามเวลา
ระลอก 4: พวกเอาเปรียบ (ผู้ใช้ API ในทางที่ผิด)
สิ่งที่เกิดขึ้น
อันนี้ไม่ได้คุกคาม infrastructure โดยตรง มันคุกคาม budget ของเรา
เราสร้างฟีเจอร์ AI ฟรีที่ยอดเยี่ยมเหล่านี้:
- AI Character Creation — อธิบาย character ของคุณ AI สร้าง profile ทั้งหมด
- AI Moment Generation — สร้าง story moment แบบ dynamic ด้วยความช่วยเหลือของ AI
- AI Plugin Creation — สร้าง character plugin ด้วยภาษาธรรมชาติ
วิสัยทัศน์ของเราสวยงาม: ลดอุปสรรคต่อความคิดสร้างสรรค์ ให้ทุกคนสัมผัสเวทมนตร์ของการสร้างด้วย AI ทำให้แพลตฟอร์มเข้าถึงได้มากขึ้น
วิสัยทัศน์ของบางคนต่างออกไป: "API ฟรี? ให้ฉันเขียน script ที่เรียกมัน 10,000 ครั้ง"
เราเห็น dashboard การใช้ AI token พุ่งขึ้น และพุ่งขึ้น และพุ่งขึ้น กราฟดูเหมือนไม้ฮอกกี้ แค่ว่าไม้ฮอกกี้ทำจากเงินที่กำลังออกจากบัญชีธนาคารของเรา
การสร้าง AI แต่ละครั้งมีค่าใช้จ่ายจริง — API call ไปยัง language model ไม่ฟรี การดู request อัตโนมัติหลายพันรายการเผาผลาญ AI budget ของเราเหมือนดูมิเตอร์แท็กซี่ในรถที่วนไปวนมา คุณรู้ว่ามันจะแพง และมันจะไม่หยุด
ส่วนที่แย่ที่สุด? พวกเขาไม่ใช่ผู้ใช้จริงที่สร้างเนื้อหาจริงด้วยซ้ำ มันแค่... ใครสักคนทดสอบว่าสามารถดึงของฟรีได้เท่าไหร่ character ที่สร้างขึ้นไร้สาระ moment ไม่มีความหมาย สิ้นเปลืองล้วนๆ
วิธีที่เราตอบสนอง
ด้วยใจที่หนัก เราเพิ่มข้อกำหนด credit สำหรับฟีเจอร์ AI เหล่านี้
การตัดสินใจนี้เจ็บปวดจริงๆ เราใช้เวลาหลายสัปดาห์สร้างเครื่องมือเหล่านี้โดยเฉพาะเพื่อให้การสร้างเข้าถึงได้มากขึ้น ตอนนี้เราต้องติดราคา — ไม่ใช่เพราะเราอยาก แต่เพราะการเข้าถึงฟรีไม่จำกัดถูกใช้เป็นอาวุธต่อเรา
เราพยายามยุติธรรม:
- ค่า credit น้อยมากสำหรับการใช้งานปกติ
- credit ฟรีให้กับผู้ใช้ใหม่
- ประสบการณ์ chat หลักยังคงฟรี
- เฉพาะการสร้าง AI ที่ใช้ทรัพยากรมากเท่านั้นที่ต้องใช้ credit
แต่ก็ยัง รู้สึกเหมือนใส่กุญแจบนสิ่งที่เราอยากให้เปิดอยู่
สิ่งที่เราเรียนรู้
"ฟรี" คือ business model ไม่ใช่จุดยืนทางศีลธรรม
เรายังเชื่อในการเข้าถึง เรายังอยากลดอุปสรรค แต่ "ฟรีไม่จำกัดสำหรับทุกคน" ทำงานได้เฉพาะถ้าทุกคนทำตัวด้วยความสุจริต เมื่อผู้ไม่ประสงค์ดีเอาเปรียบความใจกว้าง ระบบที่ใจกว้างก็ไม่ยั่งยืน — แล้วก็ไม่มีใครได้อะไร
ขีดจำกัดที่สมเหตุสมผลไม่ใช่การไม่ไว้ใจผู้ใช้ มันคือการปกป้องระบบนิเวศที่ให้บริการผู้ใช้ทุกคน ทางเลือกอื่น — ปิดฟีเจอร์ทั้งหมด — จะแย่กว่าสำหรับทุกคน
บางครั้งการปกป้องส่วนรวมหมายถึงการสร้างรั้วบางส่วน
ข้อมูลของคุณปลอดภัย (ขอให้ชัดเจนอย่างยิ่ง)
เราอยากให้ชัดเจนในเรื่องนี้:
การโจมตีเหล่านี้เกี่ยวกับทรัพยากร ไม่ใช่ข้อมูล ผู้โจมตีต้องการ:
- ✅ bandwidth ของเรา (เพื่อดาวน์โหลดเนื้อหา)
- ✅ compute ของเรา (เพื่อทำให้ server ล้น)
- ✅ เงินของเรา (เพื่อใช้ AI budget หมด)
พวกเขาไม่ได้เข้าถึง:
- ❌ บัญชีผู้ใช้
- ❌ ประวัติการสนทนา
- ❌ ข้อมูลส่วนตัว
- ❌ รายละเอียดการชำระเงิน
- ❌ ข้อมูลส่วนตัวใดๆ
เรามีทีมรักษาความปลอดภัยโดยเฉพาะ ที่เฝ้าดูภัยคุกคามความปลอดภัยจริงตลอด 24/7 ข้อมูลผู้ใช้ถูกเข้ารหัสทั้งขณะพักและระหว่างส่ง การควบคุมการเข้าถึงเข้มงวด การยืนยันตัวตนแข็งแกร่ง งานความปลอดภัยที่น่าเบื่อแต่สำคัญที่ไม่ได้ทำให้ blog post น่าตื่นเต้น — เราทำทั้งหมด
ไม่มีข้อมูลผู้ใช้ถูกเจาะ เราพูดได้อย่างมั่นใจเพราะเราบันทึกทุกอย่าง วิเคราะห์ทุกอย่าง และตรวจสอบทุกอย่าง ผู้โจมตีได้ค่า bandwidth bill และปวดหัวจากเรา พวกเขาไม่ได้อะไรจากคุณ
character ของคุณ การสนทนาของคุณ งานสร้างสรรค์ของคุณ — ทั้งหมดปลอดภัย ครบถ้วน อยู่ตรงที่ควรอยู่
ทำไมเราถึงบอกคุณเรื่องนี้
คุณอาจสงสัย: ทำไมแชร์เรื่องนี้สาธารณะ? มันไม่ทำให้เราดูอ่อนแอหรือ?
เราคิดเรื่องนี้อย่างรอบคอบ
ความโปร่งใสสร้างความไว้วางใจ
เราขอให้ผู้ใช้ไว้ใจเราในสิ่งที่มีความหมาย — งานสร้างสรรค์ของพวกเขา การเชื่อมต่อทางอารมณ์กับ AI character การสนทนาของพวกเขา ความไว้วางใจนั้นต้องการความซื่อสัตย์เกี่ยวกับความท้าทายที่เราเผชิญ
playbook เก่าคือซ่อนปัญหาจนกว่าจะระเบิด แล้วออกแถลงการณ์คลุมเครือว่า "เราประสบปัญหาทางเทคนิค" เราอยากตรงไปตรงมา: นี่คือสิ่งที่เกิดขึ้น นี่คือวิธีที่เราจัดการ นี่คือสิ่งที่เราเรียนรู้
builder คนอื่นสามารถเรียนรู้
เราไม่ใช่ทีมเล็กๆ ทีมแรกที่ถูกโจมตีหลังเปิดฟีเจอร์ฟรี และจะไม่ใช่ทีมสุดท้าย ถ้าการศึกษาราคาแพงของเราช่วยให้คนอื่นเตรียมตัวได้ดีขึ้น นั่นคือชัยชนะสำหรับทั้ง ecosystem
ถือว่านี่คือการมีส่วนร่วมของเราในหลักสูตร "สิ่งที่ไม่สอนใน startup school"
คุณสมควรได้รู้
ผู้ใช้บางคนสังเกตเห็น response time ช้าลงในช่วงสัปดาห์เหล่านี้ บางคนสังเกตเห็นว่าฟีเจอร์ตอนนี้ต้องใช้ credit คุณสมควรได้รับคำอธิบาย — ไม่ใช่ PR แบบองค์กร แต่เรื่องจริง
เรากำลังต่อสู้เพื่อให้แพลตฟอร์มทำงานต่อไป เราตัดสินใจยากภายใต้แรงกดดัน บางการตัดสินใจส่งผลต่อประสบการณ์ของคุณ คุณควรรู้ว่าทำไม
อะไรต่อไป
เราไม่ได้แค่อุดรู — เรากำลังสร้างแพลตฟอร์มที่ยืดหยุ่นมากขึ้น:
ทำไปแล้ว:
- Multi-layer caching ด้วย edge-first architecture (request ของคุณเร็วขึ้นและเราถูกโจมตียากขึ้น)
- Smart rate limiting ด้วย behavioral analysis (bot ถูกบล็อก มนุษย์ไม่สังเกต)
- security suite เต็มรูปแบบของ Cloudflare (ในที่สุดก็ตั้งค่าอย่างถูกต้อง ไม่ใช่ "สักวัน")
- การเข้าถึงแบบ credit สำหรับฟีเจอร์ AI ที่ใช้ทรัพยากรมาก (ความใจกว้างที่ยั่งยืน)
เร็วๆ นี้:
- การตรวจจับความผิดปกติที่ดีขึ้น (จับการโจมตีได้เร็วขึ้น)
- Geographic optimization (เร็วขึ้นสำหรับทุกคน ทุกที่)
- การป้องกันการใช้ในทางที่ผิดที่ซับซ้อนมากขึ้น (อยู่ก่อนผู้ไม่ประสงค์ดี)
สิ่งที่จะไม่เปลี่ยน:
- เราจะพยายามรักษาการเข้าถึง free tier — แม้ว่าอาจไม่เสถียรหรือเปลี่ยนแปลงโดยไม่แจ้งล่วงหน้า
- ความเป็นส่วนตัวและความปลอดภัยของข้อมูลผู้ใช้ — เป็นความสำคัญสูงสุดของเราเสมอ
- การสื่อสารอย่างโปร่งใส — ถ้ามีอะไรผิดพลาด คุณจะรู้
หมายเหตุถึง builder เพื่อนร่วมทาง
ถ้าคุณกำลังสร้างแพลตฟอร์มเปิด นี่คือบทเรียนที่เราจ่ายด้วยเงินจริง (และความเครียดจริง):
- Rate limiting ไม่ใช่ทางเลือก — ทำตั้งแต่วันแรก ไม่ใช่วัน "เราถูกโจมตี"
- เลือก infrastructure ที่ทนต่อการโจมตี — Cloudflare ยอดเยี่ยมจริงๆ ค่า egress จะทำลายคุณ
- Cache อย่างจริงจัง — มันคือโล่คู่สำหรับ performance และ security
- ฟีเจอร์ฟรีต้องมีขอบเขต — goodwill ไม่จำกัดถูกเอาเปรียบโดยผู้ไม่ประสงค์ดีไม่จำกัด
- Monitor ทุกอย่าง — ยิ่งตรวจจับความผิดปกติเร็วเท่าไหร่ ความเสียหายยิ่งน้อย
- เก็บ budget ฉุกเฉิน — ไม่มีทางรู้ว่าระลอกต่อไปจะมาเมื่อไหร่
และอาจสำคัญที่สุด:
- อย่าภูมิใจเกินไปที่จะขอความช่วยเหลือ — ชุมชน indie dev ให้การสนับสนุนมากกว่าที่คุณคาด
เราหวังว่าคุณไม่ต้องเรียนรู้สิ่งเหล่านี้ในทางที่แพง แต่ถ้าต้อง รู้ไว้ว่าคุณไม่ได้อยู่คนเดียว
ถึงผู้ใช้ของเรา
การถูกโจมตีเป็นประสบการณ์แปลกๆ
มันเหมือนคุณใช้เวลาหลายเดือนตกแต่งห้องนั่งเล่นที่อบอุ่น จัดเฟอร์นิเจอร์ให้ถูกที่ วางขนม และส่งคำเชิญถึงเพื่อนทุกคน คืนเปิดตัวมาถึง เพื่อนของคุณมา — ยอดเยี่ยม!
แต่ด้วย: กลุ่มคนที่คุณไม่เคยเจอมาพร้อมรถบรรทุกขนย้าย พยายามถอดโซฟาของคุณ ถ่ายรูปทุกมุมบ้าน และยังจุดไฟเล็กๆ ในครัวด้วย
เรามีทางเลือก เราสามารถเชื่อมประตูปิด ไปแบบ invite-only เท่านั้น ให้ทุกคนพิสูจน์ว่าไม่ใช่ bot ก่อนเห็นอะไร
เราไม่ทำ
แทนที่ เราติดตั้งกุญแจที่ดีกว่า จ้าง security ที่ฉลาดกว่า สร้างกฎบ้านที่สมเหตุสมผล เพราะ คนส่วนใหญ่ที่มา Reverie มาเพื่อสร้าง เชื่อมต่อ และสนุก เราจะไม่ลงโทษคนส่วนมากเพราะบาปของคนส่วนน้อย
งานปาร์ตี้ยังคงดำเนินต่อ ประตูยังคงเปิด เราแค่เก่งขึ้นในการสังเกตคนที่พกรถบรรทุกขนย้ายมา
ขอบคุณ
ทุกผู้ใช้ที่อยู่กับเราผ่าน load time ที่ช้าลงและข้อกำหนด credit: ขอบคุณ
ทุกคนที่รายงานปัญหาแทนที่จะแค่ไป: ขอบคุณ
ชุมชน indie dev ที่แชร์คำแนะนำและเรื่องเล่าสงคราม: ขอบคุณ
Cloudflare: ขอบคุณ 🙏
เราแข็งแกร่งขึ้นแล้ว ยืดหยุ่นมากขึ้น ผ่านการทดสอบในสนามรบ แพลตฟอร์มที่ออกมาจากการโจมตีเหล่านี้ดีกว่าที่เข้าไป
ครั้งต่อไปที่เราเขียนถึงคุณ หวังว่าจะเป็นการประกาศฟีเจอร์ใหม่ที่น่าตื่นเต้น
ไม่ใช่ boss อีกตัวที่เราเอาชนะ
แต่เฮ้ — ถ้ามี boss อีกตัวมา เราจะจัดการได้เช่นกัน
เจอกันในอัปเดตครั้งต่อไป 💙
Reverie Team
ธันวาคม 2025
พร้อมที่จะสัมผัสประสบการณ์การสนทนา AI แบบไดนามิกหรือไม่?
ร่วมกับผู้ใช้งานหมื่นคนที่กำลังสำรวจบุคลิกที่ไม่จำกัดและการโต้ตอบที่น่าดึงดูดบน Reverie