teach-me-ai / security
⟵ กลับหน้า Roadmap
🔒 SECURITY · อ่านก่อนใช้งานจริง

ใช้ AI อย่างปลอดภัย — กันข้อมูลหลุด & สิ่งที่ต้องระวัง

⏱️ ~25 นาที 🎯 ใช้ AI ทำงานโดยข้อมูลบริษัท/ลูกค้าไม่รั่ว 🧰 เน้นปฏิบัติได้จริงสาย dev

AI ช่วยงานได้เยอะ แต่มี “จุดตาย” ที่ dev พลาดกันบ่อยที่สุด — เผลอส่งข้อมูลที่ไม่ควรส่งออกไป ทั้งความลับบริษัท ข้อมูลลูกค้า หรือ secret ในโค้ด บทนี้ไม่ได้ขู่ให้กลัว AI แต่จะให้ “กติกาใช้งาน” ที่ทำให้คุณใช้ AI เต็มที่โดยไม่เผลอทำข้อมูลหลุด

🧭

หลักคิดเดียวที่ต้องจำ: ทุกอย่างที่คุณพิมพ์/แปะ/ให้ AI อ่าน ถือว่า “ออกไปนอกเครื่องคุณแล้ว” — มันวิ่งไปประมวลผลที่เซิร์ฟเวอร์ผู้ให้บริการ ถ้าข้อมูลนั้นหลุดออกนอกองค์กรไม่ได้ ก็อย่าเพิ่งส่ง

ข้อมูลเดินทางไปไหนบ้าง

เข้าใจเส้นทางข้อมูลก่อน แล้วจะรู้ว่าต้อง “กัน” ตรงไหน

เครื่อง/โค้ด ของคุณ prompt / ไฟล์ ผู้ให้บริการ AI (cloud) log / เก็บ? ⚠ จุดเสี่ยง ① เผลอแปะ secret/PII ② provider เก็บ/เทรนต่อ? ③ เรา log prompt เต็มไว้เอง ④ tool/agent อ่านไฟล์ที่ไม่ควร
4 จุดที่ข้อมูลมักหลุด — เราคุมได้ทั้ง 4 จุด ถ้าตั้งกติกาไว้ล่วงหน้า

ห้ามส่งอะไรเข้า AI (โดยไม่คิดก่อน)

กฎง่ายๆ: ถ้าเป็น PII (ข้อมูลส่วนบุคคล), ความลับ, หรือทรัพย์สินขององค์กร — ให้ถือว่า “ต้องคิดก่อนส่ง”

ประเภทตัวอย่างทำแทน
SecretAPI key, password, token, connection string, private keyไม่ต้องส่ง — ใช้ตัวแปรจำลอง <API_KEY>
PII ลูกค้าชื่อ-เบอร์-อีเมล-เลขบัตร ปชช.-ที่อยู่ ของผู้ใช้จริงปิดบัง (mask) หรือใช้ข้อมูลปลอม
ข้อมูลอ่อนไหวข้อมูลสุขภาพ การเงิน กฎหมาย ที่มีข้อผูกพันตรวจนโยบาย/สัญญาก่อน (PDPA)
โค้ด/ความลับบริษัทซอร์สโค้ด production, สูตรธุรกิจ, schema DB ภายในตัดเป็นชิ้นเล็ก/ทำ minimal example
⚠️

เคสที่เจ็บบ่อยสุด: แปะ error log ทั้งก้อน ให้ AI ช่วยดู แล้วในนั้นมี token / connection string / อีเมลลูกค้าติดไปด้วยโดยไม่ทันเห็น — สแกนก่อนแปะเสมอ

การตั้งค่าฝั่งผู้ให้บริการ (data retention & training)

“ผู้ให้บริการเก็บข้อมูลเราไหม / เอาไปเทรนต่อไหม” ต่างกันตามช่องทางและแพ็กเกจ — ต้องรู้ก่อนใช้งานจริง

  • API / Console (งาน dev): โดยทั่วไป Anthropic ไม่เอา input/output จาก API ไปเทรนโมเดล โดยอัตโนมัติ แต่ยังมี data retention (เก็บชั่วคราวเพื่อความปลอดภัย/กฎหมาย)
  • Zero Data Retention (ZDR): องค์กรที่เข้าเงื่อนไขขอเปิด ZDR ได้ — เหมาะกับข้อมูลอ่อนไหว (หมายเหตุ: บางโมเดลรุ่นใหม่บังคับ retention ขั้นต่ำ จึงใช้ร่วมกับ ZDR ไม่ได้)
  • แอปผู้บริโภค (เช่นแชตทั่วไป): นโยบายต่างจาก API — บางที่อาจใช้บทสนทนาไปปรับปรุงบริการ ถ้าไม่ตั้งค่า opt-out → อย่าใช้ช่องทางผู้บริโภคกับข้อมูลบริษัท

สิ่งที่ต้องทำจริง: (1) แยกใช้ API/Console สำหรับงานที่มีข้อมูลองค์กร (2) เปิด ZDR ถ้าองค์กรมีสิทธิ์และงานอ่อนไหว (3) ยืนยันนโยบายปัจจุบันในเอกสารผู้ให้บริการเสมอ เพราะนโยบายเปลี่ยนได้

ตั้งค่า Claude Code ให้ “กันหลุด”

ตอนใช้ Claude Code (หรือ agent ที่อ่านไฟล์ได้) จุดเสี่ยงคือมันอาจ อ่านไฟล์ที่ไม่ควรอ่าน (เช่น .env) แล้วเนื้อหานั้นถูกส่งขึ้น cloud คุมได้ด้วย settings.json

// .claude/settings.json — ปฏิเสธการอ่านไฟล์ลับ + คุมสิทธิ์คำสั่ง
{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Read(./**/*.pem)"
    ],
    "ask": [
      "Bash(git push:*)",
      "Bash(rm:*)"
    ]
  }
}
  • deny: บล็อกไม่ให้อ่านไฟล์ลับเด็ดขาด (secret ไม่ถูกส่งขึ้น cloud)
  • ask: คำสั่งเสี่ยง (push, ลบไฟล์) ต้องขออนุมัติก่อนทำ — กัน “agent ทำเกิน”
  • .gitignore ให้ครบ: .env, key, dump ข้อมูล — กันทั้ง commit หลุดและ AI อ่านโดยบังเอิญ
  • MCP / tool: ต่อเฉพาะเท่าที่จำเป็น จำกัดขอบเขต (least privilege) — ยิ่งต่อเยอะ ยิ่งมีทางข้อมูลรั่ว

เวลาต่อ AI เข้ากับโค้ด (LLM API)

1) เก็บ API key ให้ถูก

// ❌ ห้าม hardcode
const client = new Anthropic({ apiKey: "sk-ant-xxxxx" });

// ✅ อ่านจาก environment variable เสมอ (อย่า commit .env)
const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });

2) Redact / mask PII ก่อนยิงเข้าโมเดล

ถ้าต้องประมวลผลข้อมูลผู้ใช้ ให้แทนที่ค่าจริงด้วย placeholder ก่อน แล้วค่อยแมปกลับหลังได้คำตอบ

// ตัวอย่างแนวคิด (NestJS/TS)
function redact(text: string): string {
  return text
    .replace(/[\w.+-]+@[\w-]+\.[\w.-]+/g, "<EMAIL>")   // อีเมล
    .replace(/\b0\d{8,9}\b/g, "<PHONE>");        // เบอร์ไทย
}
const safePrompt = redact(userMessage);
⚠️

regex เป็นแค่ด่านแรก ไม่ครอบคลุม 100% — สำหรับข้อมูลอ่อนไหวจริงจัง ควรใช้ไลบรารี PII detection และตรวจซ้ำ อย่าพึ่ง regex อย่างเดียว

3) Logging hygiene

  • อย่า log prompt/response แบบเต็ม ลง log ที่ทีมอื่นเห็นได้ — เพราะข้อมูลอ่อนไหวจะไปนอนอยู่ใน log
  • ถ้าต้อง log ให้ log แบบ redact แล้ว หรือเก็บแค่ metadata (จำนวน token, latency, สถานะ)
  • ระวัง 3rd-party observability/APM ที่ดูด payload อัตโนมัติ

4) อย่าเชื่อ output ตาบอด

ข้อมูลรั่วไม่ได้มาทาง input อย่างเดียว — prompt injection อาจหลอกให้ AI “เผยข้อมูล” หรือสั่ง tool ให้ส่งข้อมูลออกไป (data exfiltration) — validate output, แยก user input ออกจาก instruction, และจำกัดสิทธิ์ tool (เจาะลึกใน Lv7 · Production)

เช็กลิสต์ก่อนใช้ AI กับงานจริง

#เช็ก
1ในสิ่งที่จะส่ง มี secret / PII / ข้อมูลลูกค้า หลุดติดไปไหม? (สแกนก่อน)
2ใช้ช่องทางที่นโยบายข้อมูลถูกต้องไหม (API/Console สำหรับงานองค์กร)?
3API key อยู่ใน env และ .env อยู่ใน .gitignore แล้ว?
4settings.json deny ไฟล์ลับ + ask คำสั่งเสี่ยง แล้ว?
5มี redact PII ก่อนส่ง และไม่ log prompt เต็ม?
6ต่อ tool/MCP เท่าที่จำเป็น (least privilege) และ validate output?
🎯 แบบฝึกหัด
  1. เปิดโปรเจกต์จริงของคุณ แล้วเช็ก: .env อยู่ใน .gitignore ไหม? ถ้ายัง เพิ่มเลย
  2. เขียน deny rule ใน settings.json สำหรับไฟล์ลับอย่างน้อย 2 pattern ในโปรเจกต์คุณ
  3. ยกสถานการณ์งานจริงที่คุณ “เกือบ” แปะข้อมูลลูกค้าให้ AI — ถ้าเกิดขึ้น จะ redact ยังไงให้ยังใช้งานได้

ลองตอบในแชท แล้วพิมพ์ /quiz security เพื่อทดสอบความเข้าใจ