ความปลอดภัยของ API ที่นักพัฒนาควรรู้

3 พฤษภาคม 2566
ความปลอดภัยของ API ที่นักพัฒนาควรรู้

การตรวจสอบระดับสูงสำหรับนักพัฒนา รวมถึงคำแนะนำในการพัฒนา API อย่างปลอดภัย รายการตรวจสอบนี้มุ่งเน้นไปที่กลยุทธ์และวิธีแก้ปัญหาเพื่อทำความเข้าใจและบรรเทาช่องโหว่เฉพาะและความเสี่ยงด้านความปลอดภัยของ Application Programming Interfaces (API) ซึ่งครอบคลุมปัญหาด้านความปลอดภัย API 10 อันดับแรกของ OWASP ทั้งหมด รายการตรวจสอบนี้ใช้ได้กับแอปพลิเคชันทุกประเภทที่ใช้ API สำหรับการสื่อสาร

ก่อนที่จะเข้าใจแนวทางปฏิบัติที่ดีที่สุด เราควรเข้าใจก่อนว่าเหตุใดจึงสำคัญสำหรับนักพัฒนาที่จะต้องรักษาความปลอดภัยของ API

  1. ตั้งแต่ธนาคาร การค้าปลีก และการขนส่ง API เป็นส่วนสำคัญของเว็บแอปพลิเคชัน และสามารถพบได้ในแอปพลิเคชันที่ติดต่อกับลูกค้า คู่ค้า และภายใน
  2. โดยธรรมชาติแล้ว API จะเปิดเผยลอจิกของแอปพลิเคชันและข้อมูลที่ละเอียดอ่อน เช่น ข้อมูลที่สามารถระบุตัวตนได้ และด้วยเหตุนี้จึงกลายเป็นเป้าหมายของผู้โจมตี
  3. หากไม่มี API ที่ปลอดภัย ก็จะเกิดปัญหาและทำให้ระบบนั้นใช้งานไม่ได้หรือไม่มีอีกต่อไป
how do api work

Broken object-level authorization

  • ใช้การตรวจสอบการให้สิทธิ์กับนโยบายผู้ใช้และลำดับชั้น
  • อย่าพึ่งพา ID ที่ไคลเอนต์ส่งมา ใช้ ID ที่จัดเก็บไว้ในวัตถุเซสชันแทน
  • ตรวจสอบการอนุญาตสำหรับคำขอของลูกค้าแต่ละรายในการเข้าถึงฐานข้อมูล
  • ใช้รหัสสุ่มที่ไม่สามารถเดาได้ (UUID)

Broken authentication

  • ตรวจสอบวิธีที่เป็นไปได้ทั้งหมดในการรับรองความถูกต้องกับ API ทั้งหมด
  • API สำหรับการรีเซ็ตรหัสผ่านและลิงค์แบบใช้ครั้งเดียวยังช่วยให้ผู้ใช้ตรวจสอบสิทธิ์ได้ และควรได้รับการปกป้องอย่างเข้มงวดเช่นเดียวกัน
  • ใช้การรับรองความถูกต้องมาตรฐาน การสร้างโทเค็น การจัดเก็บรหัสผ่าน และการยืนยันตัวตนแบบหลายปัจจัย (MFA)
  • ใช้โทเค็นการเข้าถึงที่มีอายุสั้น
  • ตรวจสอบแอปของคุณ (เพื่อให้คุณรู้ว่าใครกำลังคุยกับคุณ)
  • ใช้การจำกัดอัตราที่เข้มงวดยิ่งขึ้นสำหรับการรับรองความถูกต้อง และใช้นโยบายการล็อกและการตรวจสอบรหัสผ่านที่ไม่รัดกุม

Excessive data exposure

  • อย่าพึ่งพาผู้ใช้ในการกรองข้อมูล
  • ตรวจสอบการตอบสนองของ API ทั้งหมดและปรับเปลี่ยนให้ตรงกับสิ่งที่ผู้ใช้ API ต้องการจริงๆ
  • กำหนดโครงสร้างข้อมูลสำหรับการตอบกลับ API ทั้งหมดอย่างระมัดระวัง
  • อย่าลืมเกี่ยวกับการตอบสนองข้อผิดพลาด กำหนดโครงสร้างข้อมูลที่เหมาะสมด้วย
  • ให้ระบุข้อมูลส่วนบุคคลที่สามารถระบุตัวตนได้ (PII) และปรับการใช้งานให้เหมาะสม
  • บังคับใช้การตรวจสอบการตอบสนองเพื่อป้องกันการรั่วไหลของข้อมูลหรือข้อยกเว้นโดยไม่ตั้งใจ

Lack of resources and rate limiting

  • กำหนดการจำกัดอัตราที่เหมาะสม
  • จำกัดขนาด
  • ปรับแต่งการจำกัดอัตราให้ตรงกับ API ไคลเอนต์ ที่ควรได้รับอนุญาต
  • เพิ่มการตรวจสอบอัตราส่วนการใช้งาน
  • กำหนดขีดจำกัดสำหรับทรัพยากรคอนเทนเนอร์

Broken function level authorization

  • อย่าพึ่งพาไคลเอนต์เพื่อบังคับใช้การเข้าถึงของผู้ดูแลระบบ
  • ปฏิเสธการเข้าถึงทั้งหมดตามค่าเริ่มต้น
  • อนุญาตให้ดำเนินการกับผู้ใช้ที่อยู่ในกลุ่มหรือบทบาทที่เหมาะสมเท่านั้น
  • อนุญาตการออกแบบและทดสอบอย่างถูกต้อง

Mass assignment

  • อย่าผูกข้อมูลขาเข้าและวัตถุภายในโดยอัตโนมัติ
  • กำหนดพารามิเตอร์ที่ต้องการอย่างชัดเจน
  • ใช้คุณสมบัติ readOnly ที่ตั้งค่าเป็น true ใน object schema สำหรับคุณสมบัติทั้งหมดที่สามารถดึงข้อมูลผ่าน API แต่ไม่ควรแก้ไข
  • กำหนดโครงสร้างข้อมูล ประเภท และรูปแบบที่คุณจะยอมรับในคำขอในเวลาออกแบบอย่างแม่นยำ และบังคับใช้ในขณะรันไทม์

Security misconfiguration

  • ค้นหาข้อบกพร่องในการกำหนดค่าโดยอัตโนมัติ
  • ปิดการใช้งานคุณสมบัติที่ไม่จำเป็น
  • จำกัดการเข้าถึงระดับผู้ดูแลระบบ
  • กำหนดและบังคับใช้เอาต์พุตทั้งหมด รวมถึงข้อผิดพลาด

Injection

  • อย่าไว้ใจผู้ใช้ API ของคุณ แม้ว่าจะเป็นข้อมูลภายในก็ตาม
  • กำหนดข้อมูลอินพุตทั้งหมดอย่างเคร่งครัด และบังคับใช้เมื่อรันไทม์
  • ตรวจสอบ กรอง ข้อมูลขาเข้าทั้งหมด
  • กำหนด จำกัด และบังคับใช้เอาต์พุต API เพื่อป้องกันการรั่วไหลของข้อมูล

Improper assets management

  • ใช้ API ที่เป็นปัจจุบันทั้งหมด
  • จำกัดการเข้าถึงสิ่งที่ไม่ควรเปิดเผยต่อสาธารณะ
  • จำกัดการเข้าถึงข้อมูลที่ใช้งานจริง และแยกการเข้าถึงข้อมูลที่ใช้งานจริงและข้อมูลที่ไม่ได้ใช้งานจริง
  • ใช้การควบคุมภายนอกเพิ่มเติม เช่น ไฟร์วอลล์ API
  • เลิกใช้ API เวอร์ชันเก่าหรือการแก้ไขความปลอดภัยของ backport อย่างเหมาะสม
  • ใช้การรับรองความถูกต้องที่เข้มงวด การเปลี่ยนเส้นทาง CORS และอื่นๆ

Insufficient logging and monitoring

  • บันทึกความพยายามที่ล้มเหลว การเข้าถึงที่ถูกปฏิเสธ การตรวจสอบอินพุตล้มเหลว หรือความล้มเหลวในการตรวจสอบนโยบายความปลอดภัย
  • ตรวจสอบให้แน่ใจว่าบันทึกได้รับการจัดรูปแบบเพื่อให้เครื่องมืออื่นๆ ใช้งานได้เช่นกัน
  • ป้องกันบันทึก เช่น ข้อมูลที่มีความละเอียดอ่อนสูง
  • บันทึกรายละเอียดที่เพียงพอเพื่อระบุตัวผู้โจมตี
  • หลีกเลี่ยงการมีข้อมูลที่ละเอียดอ่อนในบันทึก หากคุณต้องการข้อมูลเพื่อจุดประสงค์ในการแก้ไขจุดบกพร่อง ให้แก้ไขบางส่วน


คุณสามารถดูเพิ่มเติมได้สำหรับความรู้ที่แบ่งปันโดยชุมชน OWASP