Deep Dive: API Security Fundamentals
การแตกตัวศัพท์เฉพาะด้านความปลอดภัย API ทั่วไป: ความเสี่ยงหลัก OWASP API Top 10 และการป้องกันที่นักพัฒนาทุกคนควรรู้
APIs เป็นเนื้อเยื่อเชื่อมต่อของซอฟต์แวร์สมัยใหม่ ขับเคลื่อนแอปพลิเคชันมือถือ ไมโครเซอร์วิส และการรวมประสานกับบุคคลที่สาม เนื่องจากพวกเขาเปิดเผยตรรกะการใช้งานและข้อมูลโดยตรง APIs จึงกลายเป็นเป้าหมายที่ชื่นชอบสำหรับผู้โจมตี ความปลอดภัย API คือวินัยในการออกแบบ ทดสอบ และป้องกันอินเทอร์เฟซเหล่านี้จากการใช้งานผิดวิธี
สิ่งที่ทำให้ APIs แตกต่างออกไป
ต่างจากหน้าเว็บแบบดั้งเดิม APIs สื่อสารผ่านรูปแบบข้อมูลที่มีโครงสร้างเช่น JSON หรือ XML มักจะมีการควบคุมจากมนุษย์น้อยที่สุด ซึ่งหมายความว่า:
- พื้นผิวการโจมตีที่สูงกว่าต่อ endpoint — แต่ละ API route นั้นเป็นแอปพลิเคชันขนาดเล็กของตัวเองที่มี auth การตรวจสอบ และตรรกะทางธุรกิจของตัวเอง
- ความเชื่อถือระหว่างเครื่องกับเครื่อง — บริการมักจะถือว่า หากคำขอมี token ที่ถูกต้อง ก็ถูกต้อง ซึ่งผู้โจมตีใช้ประโยชน์ผ่านการโจรกรรม token หรือการทำซ้ำ
- การเปลี่ยนแปลงอย่างรวดเร็ว — APIs พัฒนาอย่างรวดเร็ว และ endpoint "shadow" ที่ไม่มีเอกสารหรือเลิกใช้แล้วบ่อยครั้งที่ผ่านการตรวจสอบความปลอดภัย
คลาสความเสี่ยงทั่วไป
OWASP API Security Top 10 ครอบครัวปัญหาที่เกิดขึ้นบ่อยที่สุดในระบบการผลิต:
- Broken Object Level Authorization (BOLA) — ผู้ใช้สามารถเข้าถึงข้อมูลของผู้ใช้คนอื่นได้โดยเพียงแต่เปลี่ยน ID ในคำขอ เนื่องจากเซิร์ฟเวอร์ไม่ตรวจสอบความเป็นเจ้าของ
- Broken Authentication — การจัดการ token ที่อ่อนแอ ตัวระบุเซッสชันที่คาดเดาได้ หรือการขาด rate limiting บน endpoint การเข้าสู่ระบบ
- Excessive Data Exposure — APIs ส่งกลับออบเจกต์ฐานข้อมูลแบบเต็มและพึ่งพากับไคลเอนต์ที่จะกรองฟิลด์ที่ละเอียดอ่อนออก
- Lack of Resources & Rate Limiting — ไม่มีการควบคุมอัตราอนุญาตให้ผู้โจมตีใช้ brute-force ในอักขระประจำตัวหรือเบิกจ่ายทรัพยากรของแบ็กเอนด์
- Broken Function Level Authorization — ผู้ใช้ทั่วไปเข้าถึง endpoint เฉพาะแอดมินเนื่องจากการตรวจสอบบทบาทหายไปหรือไม่สอดคล้องกัน
- Mass Assignment — การยอมรับฟิลด์ที่จัดเตรียมโดยไคลเอนต์ (เช่น
isAdmin) โดยตรงเข้าสู่แบบจำลองฐานข้อมูลโดยไม่มีการกรอง - Security Misconfiguration — ข้อความแสดงข้อผิดพลาดที่ยาวเหยิน endpoint debug ที่เปิดเผย หรือการขาด security header
- Injection — ข้อมูลที่ไม่ได้ทำความสะอาดถึง SQL NoSQL หรือตัวแปลคำสั่งผ่าน API parameter
Authentication และ Authorization Essentials
Authentication ยืนยันว่า ใคร กำลังเรียก API; authorization ยืนยันว่า อะไร ที่พวกเขาได้รับอนุญาตให้ทำ ความปลอดภัย API ที่แข็งแกร่งต้องการให้ทั้งสองชั้นถูกบังคับใช้อย่างเป็นอิสระในทุกคำขอ:
- ใช้โปรโตคอลมาตรฐานอุตสาหกรรมเช่น OAuth 2.0 หรือ OpenID Connect แทนโครงการ token ที่เป็นกำหนดเอง
- ตรวจสอบ JWTs อย่างถูกต้อง — ตรวจสอบลายเซ็น การหมดอายุ ผู้ออกแบบ และ audience claim; ไม่เชื่อ token ที่ไม่ได้ลงนามหรือ
alg: none - บังคับใช้การตรวจสอบระดับออบเจกต์ทั้งหมดในเซิร์ฟเวอร์: ทุกคำขอที่อ้างอิง resource ID ต้องตรวจสอบว่าผู้เรียกนั้นเป็นเจ้าของหรือมีสิทธิ์ของทรัพยากรนั้นจริงๆ
- ใช้หลักการสิทธิน้อยที่สุดกับ API key และบัญชีบริการ ให้ขอบเขตแคบมากกว่าการให้สิทธิ์การเข้าถึงที่กว้าง
Input Validation และ Output Control
ถือว่า API parameter ทั้งหมด — รวมถึง header query string และ nested JSON field — เป็นข้อมูลที่ไม่น่าเชื่อถือ:
- ตรวจสอบประเภทข้อมูล ความยาว และรูปแบบโดยใช้ schema validation (เช่น JSON Schema หรือ OpenAPI-based validator)
- ใช้ allowlist สำหรับฟิลด์ที่คาดไว้ระหว่าง deserialization เพื่อป้องกันการโจมตี mass assignment
- ส่งกลับเฉพาะฟิลด์ที่ไคลเอนต์ต้องการจริงๆ; หลีกเลี่ยงการทิ้งออบเจกต์ภายในทั้งหมดในการตอบสนอง
- ทำให้ error response เป็นมาตรฐานเพื่อไม่ให้รั่วไหลของ stack trace เส้นทางภายใน หรือรายละเอียด database
Rate Limiting, Monitoring และ Logging
แม้แต่ APIs ที่ผ่านการตรวจสอบสิทธิ์ที่ดีก็ต้องป้องกันจากรูปแบบการใช้งานผิด:
- ใช้ per-user และ per-IP rate limiting เพื่อลดการ brute-force และการเก็บขูด
- บันทึก authentication event authorization failure และรูปแบบการเข้าถึงที่ผิดปกติเพื่อการวิเคราะห์ในภายหลัง
- ติดตามความผิดปกติ เช่น ลำดับการร้องขออย่างกระทันหันไปยัง endpoint ที่ละเอียดอ่อนหรือการเข้าถึงจากภูมิศาสตร์ที่ไม่คาดคิด
- รักษาสูตร API ที่ถูกต้อง — คุณไม่สามารถรักษาความปลอดภัยของสิ่งที่คุณไม่รู้ว่ามีอยู่ ดังนั้นจึงติดตามและเลิกใช้ deprecated หรือ shadow endpoint
Practical Testing Approaches
การรักษาความปลอดภัย API เป็นกระบวนการที่เป็นไปอย่างต่อเนื่อง ไม่ใช่การตรวจสอบครั้งเดียว:
- รวม API-specific tool (เช่น Postman collection จับคู่กับ security scanner) เข้าใน CI/CD pipeline
- ดำเนิน manual testing สำหรับ authorization flaw เนื่องจากเครื่องสแกนแบบอัตโนมัติมักจะพลาด BOLA และปัญหา business-logic
- เก็บ API documentation (OpenAPI/Swagger spec) ให้สอดคล้องกับการใช้งานจริงเพื่อหลีกเลี่ยงจุดสาเร็จระหว่างการทดสอบ
- ตรวจสอบการรวมประสาน API ของบุคคลที่สามด้วยความเข้มงวดเดียวกับโค้ดของคุณเอง เนื่องจาก API ของผู้ร่วมมือที่ถูกแทรกแซงอาจกลายเป็นเวกเตอร์การโจมตี
Closing Thoughts
ความปลอดภัย API ผสมผสาน principle ความปลอดภัยของแอปพลิเคชันเว็บแบบคลาสสิกกับความท้าทายที่ไม่ซ้ำกันของการสื่อสารระหว่างเครื่องกับเครื่องในขนาดใหญ่ การ authorization ที่ถูกต้อง การตรวจสอบ input ทุกตัว และการรักษาการมองเห็น API surface ของคุณเป็นรากฐานของการป้องกันที่ดื้อแข็ง
สำรวจส่วนที่เกี่ยวข้องของ Korra Studio เกี่ยวกับความปลอดภัยของแอปพลิเคชันเว็บและการออกแบบ authentication เพื่อสร้างความเข้าใจที่ลึกซึ้งและแบบปฏิบัติของแนวคิดเหล่านี้
เขียนด้วยความช่วยเหลือของ AI ตรวจสอบและเผยแพร่โดย Michal Pilch (CISSP), Korra Studio
นี่คือบันทึกหนึ่งจากฐานความรู้ของ Korra Studio — แพลตฟอร์มจับคู่หัวข้อแต่ละหัวข้อกับการฝึกสอนแบบ 1-to-1
เริ่มใช้งานฟรีarrow_forward