เว็บที่สร้างด้วย AI ปลอดภัยได้ แต่จะไม่ปลอดภัยเองโดยอัตโนมัติ AI เขียนโค้ดให้ทำงานได้เร็ว แต่จะไม่คิดเรื่องความปลอดภัยให้ครบเองถ้าเราไม่สั่ง และไม่ตรวจซ้ำ ข่าวดีคือจุดเสี่ยงส่วนใหญ่ซ้ำกันแทบทุกโปรเจกต์ ถ้าเช็กตาม 10 ข้อในบทความนี้ก่อนเปิดให้คนใช้จริง ก็ปิดช่องโหว่ที่เจอบ่อยได้เกือบหมด
บทความนี้เขียนให้คนที่ทำเว็บหรือแอปด้วย Claude Code, Codex, Cursor หรือเครื่องมืออื่น ไม่ว่าจะเขียนโค้ดเป็นหรือไม่ก็ตาม เราจะดูว่าทำไมโค้ดจาก AI ถึงพลาดเรื่องความปลอดภัยบ่อย จุดไหนต้องตรวจ และมีเครื่องมือฝีมือคนไทยตัวไหนช่วยได้บ้าง
ทำไมโค้ดที่ AI เขียนถึงมีช่องโหว่บ่อย
AI ถูกฝึกมาให้ทำตามคำสั่งให้สำเร็จ ถ้าเราพิมพ์ว่า "ทำหน้า login ให้หน่อย" สิ่งที่ได้คือหน้า login ที่ใช้งานได้ แต่อาจไม่มีการจำกัดจำนวนครั้งที่ลองรหัสผ่าน ไม่มีการตรวจสิทธิ์ฝั่ง server หรือเก็บ API key ไว้ในโค้ดฝั่ง browser ที่ใครเปิด DevTools ก็เห็นได้
สาเหตุหลักมี 3 อย่าง
- AI มองเห็นแค่งานตรงหน้า ไม่ได้มองทั้งระบบว่าข้อมูลไหลไปที่ไหน ใครเข้าถึงได้บ้าง
- คนสั่งไม่ได้บอกเงื่อนไขด้านความปลอดภัยใน prompt เพราะไม่รู้ว่าต้องบอก
- พอเว็บทำงานได้ คนก็รีบ deploy เลย โดยไม่ได้ทดสอบแบบคนที่ตั้งใจจะเจาะ
ปัญหาเหล่านี้ไม่ได้แปลว่าห้ามใช้ AI แต่แปลว่าเราต้องเพิ่มขั้นตอนตรวจก่อนเปิดใช้งานเข้าไปในขั้นตอนทำงานด้วย
เช็กลิสต์ 10 ข้อก่อนเปิดเว็บให้คนใช้จริง
1. API key และ secret ต้องไม่อยู่ในโค้ดฝั่ง browser
จุดนี้พลาดกันบ่อยที่สุด เช่น ใส่ key ของ OpenAI, Gemini หรือ Claude ไว้ในไฟล์ JavaScript ที่ส่งไปให้ browser ใครก็ดึงไปใช้ได้ และคนที่จ่ายเงินคือเรา วิธีแก้คือเก็บ key ไว้ใน environment variable ฝั่ง server แล้วให้ browser เรียกผ่าน API ของเราเองเท่านั้น
2. ไม่ commit ไฟล์ .env ขึ้น GitHub
เช็กว่ามีไฟล์ .gitignore ที่ระบุ .env แล้ว ถ้าเคยเผลอ push ขึ้นไป การลบไฟล์ออกทีหลังไม่พอ เพราะยังอยู่ใน history ต้องสร้าง key ใหม่และยกเลิก key เก่าทันที
3. ตรวจสิทธิ์ที่ฝั่ง server หรือ database ไม่ใช่แค่ซ่อนปุ่ม
AI ชอบทำระบบสิทธิ์แบบซ่อนเมนูไม่ให้คนทั่วไปเห็นหน้าแอดมิน แต่ถ้าคนพิมพ์ URL ตรง ๆ หรือยิง API เองก็ยังเข้าได้ การตรวจสิทธิ์ต้องเกิดที่ server หรือที่ database เสมอ ถ้าใช้ Supabase ต้องเปิด Row Level Security และเขียน policy ให้ครบทุกตาราง ถ้าใช้ Firebase ต้องเขียน Security Rules ไม่ใช่ปล่อยเป็นโหมดทดสอบที่เปิดให้อ่านเขียนได้ทั้งหมด
4. ผู้ใช้เห็นได้เฉพาะข้อมูลของตัวเอง
ลองล็อกอินด้วยบัญชี A แล้วเปลี่ยนเลข id ใน URL หรือใน request เป็นของบัญชี B ถ้ายังเห็นข้อมูลของ B ได้ แปลว่ามีช่องโหว่ วิธีทดสอบนี้ง่ายมากและควรทำทุกครั้ง
5. ตรวจข้อมูลที่ผู้ใช้กรอกเข้ามาทุกช่อง
ทุกช่องที่ผู้ใช้พิมพ์ได้คือทางเข้าของปัญหา ทั้ง SQL injection และ XSS ให้สั่ง AI ใช้ query แบบ parameterized และ escape ข้อความก่อนแสดงผล รวมถึงจำกัดชนิดและขนาดไฟล์ที่อัปโหลดได้
6. จำกัดจำนวน request (rate limit)
ถ้าเว็บเรียก AI API ทุกครั้งที่มีคนกดปุ่ม คนที่ตั้งใจป่วนสามารถเขียน script ยิงซ้ำจนบิลพุ่งได้ ควรมี rate limit ต่อผู้ใช้หรือต่อ IP และตั้งวงเงินสูงสุดในหน้าบัญชีของผู้ให้บริการ AI ไว้ด้วย
7. ใช้ HTTPS และตั้งค่า CORS ให้แคบ
hosting ส่วนใหญ่อย่าง Vercel, Cloudflare Pages หรือ GitHub Pages ให้ HTTPS มาให้แล้ว แต่ CORS ที่ AI ตั้งให้มักเป็นแบบเปิดรับทุก domain ควรแก้ให้รับเฉพาะ domain ของเราเอง
8. ข้อความ error ต้องไม่บอกรายละเอียดระบบ
หน้า error ที่โชว์ stack trace, ชื่อตาราง หรือ path ของไฟล์ ช่วยให้คนที่จะเจาะระบบทำงานง่ายขึ้น ตอน deploy จริงควรแสดงข้อความกลาง ๆ ให้ผู้ใช้ และเก็บรายละเอียดไว้ใน log ฝั่ง server
9. อัปเดต package และตรวจ dependency
AI มักเลือก library เวอร์ชันที่มันจำได้ ซึ่งอาจเก่าและมีช่องโหว่ที่รู้กันแล้ว รัน npm audit หรือเปิด Dependabot บน GitHub เป็นวิธีง่ายที่สุดในการรู้ตัวก่อน
10. เก็บข้อมูลส่วนตัวให้น้อยที่สุด
ข้อมูลที่ไม่เก็บไว้ก็ไม่มีทางรั่ว ถ้าไม่จำเป็นต้องใช้เลขบัตรประชาชน ที่อยู่ หรือเบอร์โทร ก็ไม่ต้องขอ ถ้าต้องเก็บ ให้คิดเรื่อง PDPA ตั้งแต่ต้น และเขียนนโยบายความเป็นส่วนตัวให้ผู้ใช้อ่าน
ตารางสรุป: จุดเสี่ยง วิธีเช็ก และวิธีแก้
| จุดเสี่ยง | วิธีเช็กเร็ว ๆ | วิธีแก้ |
|---|---|---|
| API key หลุด | เปิด DevTools ค้นคำว่า key หรือ sk | ย้ายไป environment variable ฝั่ง server |
| ไฟล์ .env ขึ้น GitHub | ค้นใน repo และ history | เพิ่มใน .gitignore และสร้าง key ใหม่ |
| ตรวจสิทธิ์แค่ฝั่งหน้าเว็บ | พิมพ์ URL หน้าแอดมินตรง ๆ | ตรวจสิทธิ์ที่ server หรือ database |
| เห็นข้อมูลคนอื่น | เปลี่ยน id ใน URL หรือ request | เขียน policy ผูกข้อมูลกับผู้ใช้ |
| input ไม่ถูกตรวจ | ลองกรอก script หรือเครื่องหมาย ' | parameterized query และ escape |
| ไม่มี rate limit | กดปุ่มรัว ๆ หรือยิงซ้ำด้วย script | จำกัด request และตั้งวงเงิน API |
| error บอกรายละเอียด | ทำให้ระบบพังแล้วดูหน้าจอ | แสดงข้อความกลาง ๆ เก็บ log ไว้หลังบ้าน |
| dependency เก่า | รัน npm audit | อัปเดต package และเปิด Dependabot |
ตัวอย่างจากผลงานคนไทยบน applnw.com
บนแอปเทพมีผลงานหลายชิ้นที่เกี่ยวกับความปลอดภัยโดยตรง และอีกหลายชิ้นที่ออกแบบเรื่องสิทธิ์และข้อมูลไว้ให้ดูเป็นตัวอย่างได้
เครื่องมือที่ช่วยตรวจโค้ดและเว็บ
Parisec เป็นเครื่องมือตรวจความปลอดภัยและหาช่องโหว่ของเว็บไซต์ด้วย pentest แบบง่าย เจ้าของเปิดให้ใช้ฟรีสำหรับคนที่อยากตรวจ code ที่สร้างด้วย AI ตรงกับกลุ่มคนอ่านบทความนี้พอดี เหมาะใช้เป็นด่านตรวจหลังจากไล่เช็กลิสต์ด้วยตัวเองแล้ว
NodeGuard AI (Gemini Edition) ตรวจโค้ด Node.js ที่เขียนด้วย JavaScript หรือ TypeScript โดยใช้ Google Gemini หาปัญหาเรื่อง event loop, memory, async, ฐานข้อมูล และความปลอดภัย รวมถึงความซับซ้อนของโค้ดที่กระทบการดูแลรักษา แต่ไม่ได้ตรวจเรื่องการตั้งชื่อหรือการจัดรูปแบบโค้ด ถ้าโปรเจกต์ของคุณเป็น Node.js ก็ใช้ช่วยตรวจอีกชั้นได้
ผลงานที่ออกแบบเรื่องสิทธิ์ผู้ใช้ให้ดูเป็นตัวอย่าง
D-DoGrade ช่วยครูจัดการคะแนนและตัดเกรดอัตโนมัติ จุดที่น่าสนใจคือนักเรียนเปิดดูได้เฉพาะคะแนนของตัวเองผ่านมือถือ ซึ่งตรงกับข้อ 4 ในเช็กลิสต์ ถ้าคุณกำลังทำระบบที่ผู้ใช้แต่ละคนมีข้อมูลของตัวเอง นี่คือพฤติกรรมที่ต้องทดสอบให้ผ่าน
Neo Siam Logistics Pallet Management ใช้ติดตาม pallet ระหว่างสาขากับคู่ค้า ผู้ดูแลเห็นภาพรวมทุกสาขา ส่วนผู้ใช้ทั่วไปเข้าถึงได้เฉพาะสาขาที่ได้รับมอบหมาย เป็นตัวอย่างของการแบ่งสิทธิ์หลายระดับ ซึ่งเป็นงานที่ต้องสั่ง AI ให้ชัดว่าใครเห็นอะไรได้บ้าง
ผลงานที่คิดเรื่องข้อมูลส่วนตัวตั้งแต่ต้น
Velotech Face Attendance เป็นระบบลงเวลาด้วยใบหน้าและตรวจความปลอดภัยในโรงงาน เจ้าของระบุว่าประมวลผลภายในองค์กรตามแนวทาง PDPA ข้อมูลใบหน้าเป็นข้อมูลอ่อนไหว การออกแบบให้ข้อมูลไม่ต้องออกไปข้างนอกจึงเป็นแนวคิดที่ควรศึกษา
AI Usage Bar แสดงเปอร์เซ็นต์การใช้งาน Claude, Codex, Gemini และเจ้าอื่นบน taskbar ของ Windows โดยทำงานแบบอ่านอย่างเดียวและไม่ส่งข้อมูลออกจากเครื่อง ตรงกับหลักข้อ 10 ว่าเก็บและส่งข้อมูลให้น้อยที่สุด
สั่ง AI ให้ช่วยตรวจความปลอดภัยยังไง
เครื่องมืออย่าง Claude Code หรือ Cursor ช่วยตรวจโค้ดของตัวเองได้ดีถ้าสั่งให้ชัด ลองใช้ prompt แนวนี้หลังจากทำฟีเจอร์เสร็จ
> ตรวจโปรเจกต์นี้แบบคนที่ตั้งใจจะเจาะระบบ หา API key ที่หลุดไปฝั่ง browser, จุดที่ตรวจสิทธิ์แค่หน้าเว็บ, API ที่ผู้ใช้คนหนึ่งดึงข้อมูลของคนอื่นได้, input ที่ไม่ถูกตรวจ และ endpoint ที่ไม่มี rate limit สรุปเป็นรายการพร้อมระดับความรุนแรง ยังไม่ต้องแก้
การบอกว่า "ยังไม่ต้องแก้" ช่วยให้เราได้เห็นภาพรวมก่อน แล้วค่อยเลือกแก้ทีละข้อ ซึ่งตรวจทานได้ง่ายกว่าให้ AI แก้ทั้งหมดในรอบเดียว
อีกเทคนิคคือใส่กฎความปลอดภัยไว้ในไฟล์คำสั่งของโปรเจกต์ เช่น CLAUDE.md หรือ AGENTS.md เช่น "ห้ามใส่ secret ในโค้ดฝั่ง client" และ "ทุก API ต้องตรวจสิทธิ์ผู้ใช้ก่อนคืนข้อมูล" AI จะอ่านกฎนี้ทุกครั้งที่เริ่มงาน ไม่ต้องพิมพ์ซ้ำ
สิ่งที่ AI ยังทำแทนไม่ได้
ต่อให้ AI ตรวจให้ละเอียดแค่ไหน ก็ยังมีบางเรื่องที่เจ้าของเว็บต้องตัดสินใจเอง เช่น ข้อมูลไหนจำเป็นต้องเก็บจริง ใครควรมีสิทธิ์ทำอะไร และถ้าข้อมูลรั่วจะแจ้งผู้ใช้ยังไง เรื่องเหล่านี้เป็นการตัดสินใจทางธุรกิจ ไม่ใช่แค่เรื่องโค้ด
ถ้าเว็บของคุณรับเงิน เก็บข้อมูลสุขภาพ หรือข้อมูลการเงินของผู้ใช้ การจ้างผู้เชี่ยวชาญตรวจก่อนเปิดใช้เป็นเงินที่คุ้มค่า เพราะต้นทุนของการแก้หลังข้อมูลรั่วสูงกว่ามาก
สรุป
เว็บที่สร้างด้วย AI ไม่ได้อันตรายกว่าเว็บที่คนเขียนเอง แต่เพราะสร้างได้เร็ว คนจึงมักข้ามขั้นตอนตรวจไป ถ้าทำเช็กลิสต์ 10 ข้อนี้ให้เป็นนิสัยก่อน deploy ทุกครั้ง ใช้เครื่องมือช่วยตรวจอย่าง Parisec หรือ NodeGuard AI อีกชั้น และสั่ง AI ให้ตรวจโค้ดของตัวเองแบบคนที่ตั้งใจจะเจาะ เว็บของคุณก็จะพร้อมเปิดให้คนใช้จริงได้อย่างมั่นใจขึ้น
ใครทำเครื่องมือด้านความปลอดภัยหรือเว็บที่ออกแบบเรื่องนี้มาดี ส่งผลงานมาลงที่ applnw.com ได้ จะได้เป็นตัวอย่างให้คนไทยที่กำลังเริ่มสร้างเว็บด้วย AI