Security Through Obscurity คืออะไร และทำไมแค่ซ่อน URL ถึงไม่ปลอดภัยใน Vibe Coding Project
Security Through Obscurity คืออะไร
มีความเชื่อผิด ๆ ที่พบบ่อยมากในหมู่คนที่เพิ่งเริ่ม Deploy โปรเจกต์ครั้งแรกว่า:
“ก็ไม่ได้บอกใคร URL นี่ ใครจะมาเจอได้ล่ะ?”
แนวคิดนี้มีชื่อเรียกในวงการ Security ว่า Security Through Obscurity การพึ่งพาความ “ซ่อนเร้น” แทนการทำให้ระบบปลอดภัยจริง ๆ และมันไม่ได้ผล
⚠️ ความเสี่ยง: URL ของ Vibe Coding Project ที่ Deploy บน Vercel, Netlify, หรือ Cloudflare ไม่ได้ “ซ่อน” อยู่เลย แค่คุณไม่ได้แชร์ให้ใคร ไม่ได้แปลว่าไม่มีใครเจอ
ตัวอย่าง Default Domain จากทุก Deployment Platform
ทุก Platform มี Default Domain ที่เป็น Pattern ชัดเจน ทันทีที่คุณ Deploy เสร็จแล้ว ระบบจะใช้ Default Domain หมายความว่าหากคุณไม่ได้เปลี่ยนเป็น Custom Domain และไม่ได้สร้าง robots.txt มีโอกาสที่ใครก็ตามสามารถ Search หา Project ของคุณได้ทันที
Frontend Platforms
| Platform | Default Domain Pattern | ตัวอย่าง | Google Search ทดสอบ |
|---|---|---|---|
| GitHub Pages | username.github.io | peterdev.github.io/my-app | site:github.io "admin dashboard" |
| Vercel | project.vercel.app | vibekit-crm.vercel.app | site:vercel.app "ระบบสมาชิก" |
| Netlify | project.netlify.app | client-portal.netlify.app | site:netlify.app "login" "password" |
| Cloudflare Pages | project.pages.dev | internal-tools.pages.dev | site:pages.dev "api" "internal" |
| Firebase Hosting | project-id.web.app | my-startup.web.app | site:web.app "staging" "test" |
| Surge.sh | project.surge.sh | demo-v2.surge.sh | site:surge.sh "prototype" "demo" |
| Render (Static) | project.onrender.com | landing-page.onrender.com | site:onrender.com "crm" |
Backend / API Platforms
| Platform | Default Domain Pattern | ตัวอย่าง | Google Search ทดสอบ |
|---|---|---|---|
| Railway | project.up.railway.app | api-prod.up.railway.app | site:railway.app "api" "health" |
| Render (Service) | service.onrender.com | backend-staging.onrender.com | site:onrender.com "swagger" |
| Fly.io | app.fly.dev | my-api.fly.dev | site:fly.dev "graphql" "playground" |
| Heroku | app.herokuapp.com | admin-panel.herokuapp.com | site:herokuapp.com "admin" "secret" |
| Supabase | ref.supabase.co | xyzabc.supabase.co/rest/v1/ | site:supabase.co "anon" "key" |
| Neon (DB) | ep-xxx.region.aws.neon.tech | ep-cold-smoke-123.us-east-2.aws.neon.tech | หลุดผ่าน .env ใน Git |
| PocketBase | project.pockethost.io | my-cms.pockethost.io | site:pockethost.io "api" "collections" |
Pattern ที่ทำให้โดน Search เจอง่ายขึ้นไปอีก
| ระดับความเสี่ยง | ตัวอย่างชื่อ | เหตุผล |
|---|---|---|
| 🔴 สูงมาก | client-name-crm.vercel.app | สื่อชื่อ client + ประเภทระบบ |
| 🔴 สูงมาก | api-prod.up.railway.app | บอกว่าเป็น production |
| 🟠 สูง | internal-dashboard.pages.dev | keyword “internal” ดึงดูด crawler |
| 🟠 สูง | admin-v2.netlify.app | “admin” เป็น keyword ที่คนมักค้นหา |
| 🟡 กลาง | my-app-staging.vercel.app | “staging” ทำให้รู้ว่าไม่ใช่ production |
| 🟢 ต่ำกว่า | xk2p9q.vercel.app | ชื่อ random ไม่สื่อความหมาย แต่ก็ยังโดน index ได้ |
วิธีตรวจสอบว่า Search Engine จัดเก็บข้อมูลบนเว็บไซต์ของเราไปหรือไม่ ?
เปิด Google แล้วลองพิมพ์:
site:[default domain] [ชื่อ project, keyword ที่น่าจะอยู่ในเว็บ,ชื่อ client, feature, ชื่อบริษัท, product]
ถ้าเจอแสดงว่า Google เจอแล้ว และคนอื่นก็เจอได้เหมือนกัน
ตัวอย่างกรณีศึกษา: Vibe Coding Project บน Vercel
สถานการณ์: คุณสร้างเว็บแอปด้วย Vibe Coding แล้ว Deploy บน Vercel ได้ URL ออกมา:
- my-course-platform.vercel.app
- admin-dashboard-prod.vercel.app
- vibekit-crm-v2.vercel.app
URL ดูซับซ้อน ไม่มีใครน่าจะเดาได้หรอก แต่ Google และ Search Engine อื่น ๆ สามารถเข้ามาเก็บข้อมูลหน้าเว็บของคุณตั้งแต่วันแรกที่ Deploy แล้ว ใครก็ตามพิมพ์แค่นี้:
site:vercel.app "course platform"
site:vercel.app "admin dashboard"
site:netlify.app "ระบบสมาชิก"
เพียงเท่านี้ก็เจอโปรเจกต์ที่คุณคิดว่า “ไม่มีใครรู้” ได้เลย
สร้างไฟล์ robots.txt เพื่อป้องกันให้ Search Engine ไม่เข้ามาเก็บข้อมูล
สร้างไฟล์ robots.txt (เช่น https://yourdomain.com/robots.txt) โดยใส่ข้อมูลแบบนี้:
User-agent: *
Disallow: /
โดย Disallow จะใส่ URL ที่ไม่ต้องการให้ Search Engine เข้ามาเก็บข้อมูล (หากใส่ / จะหมายถึงไม่ให้เก็บข้อมูลทั้งเว็บไซต์)
ไฟล์นี้บอก Search Engine ว่า “อย่าเก็บข้อมูลเว็บนี้นะ” แต่มีข้อจำกัดที่ต้องรู้ robots.txt เป็นแค่ ข้อตกลง (Convention) ไม่ใช่การบังคับ และ บางที Security Scanner ก็ไม่สนใจ
สิ่งที่ robots.txt ทำได้: ขอให้ Google ไม่ index ต่อจากนี้
สิ่งที่ robots.txt ทำไม่ได้: ลบสิ่งที่ Index ไปแล้ว และห้ามคนที่รู้ URL อยู่แล้วเข้าถึงข้อมูล
วิธีแก้ที่ถูกคือทำให้ระบบปลอดภัยจริง ไม่ใช่แค่ซ่อน URL
คำถามที่พบบ่อย (FAQ)
การพึ่งพาความซ่อนเร้น เช่น ไม่บอกใครว่า URL คืออะไร แทนการสร้าง Security จริง ๆ วงการ Security ถือว่าวิธีนี้ไม่เพียงพอและไม่ควรใช้เป็นกลไกหลัก
ปลอดภัยขึ้นนิดนึง แต่ก็ยังโดน Index ได้อยู่ดี ชื่อ random แค่ทำให้คนเดาได้ยากขึ้น แต่ไม่ได้ป้องกันอะไรจริงๆ เพราะ Google ไม่ได้ “เดา” URL มันแค่ Crawl ทุกลิงก์ที่เจอ
เพราะ Platform พวกนี้ไม่ได้บล็อก Google Crawler โดย default ทันทีที่ Deploy เสร็จ Google ก็วิ่งเข้าไป Index หน้าเว็บของคุณได้เลย เหมือนเปิดร้านแล้วติดป้ายหน้าร้านไม่ได้แปลว่าต้องบอกปากต่อปากก็มีคนเดินผ่านมาเห็นได้
ไม่ได้ robots.txt บอก Crawler ว่าอย่า Index แต่ไม่ได้บล็อกคนที่รู้ URL จากการเข้าเว็บตรง ๆ
ต้องอยู่ที่ root ของ domain เสมอ คือ https://yourdomain.com/robots.txt วางที่อื่นไม่มีผล Crawler จะไม่ไปหาที่อื่น
อ้างอิง: OWASP Security by Design Principles — Avoid Security Through Obscurity