- TL;DR : สำหรับการเรียก API แทนที่จะรีไดเร็กต์จาก HTTP ไป HTTPS ควรทำให้คำขอล้มเหลว ให้ปิดการใช้งาน HTTP ไปเลยทั้งหมด หรือส่งคืน HTTP error response ที่ชัดเจน และเพิกถอน API key ที่ถูกส่งผ่านการเชื่อมต่อที่ไม่เข้ารหัส น่าเสียดายที่ปัจจุบันผู้ให้บริการ API ชื่อดังหลายรายยังไม่ทำเช่นนั้น
ภูมิหลัง
- เมื่อเว็บเบราว์เซอร์เข้าถึง URL แบบ HTTP บริการมักจะรีไดเร็กต์คำขอนั้นไปยังหน้า HTTPS
- ทราฟฟิก HTTP เริ่มต้นไม่ได้ถูกเข้ารหัส จึงเสี่ยงต่อการโจมตีแบบ man-in-the-middle (MITM)
- มีการนำเทคโนโลยีอย่าง HSTS (HTTP Strict Transport Security) มาใช้เพื่อเสริมความปลอดภัย
ความเสี่ยงจากการพิมพ์ผิดเล็กน้อย
- ระหว่างทำงานรวมระบบกับ API ของบุคคลที่สาม ได้พิมพ์ base URL ของ API ผิดเป็น
http:// แทน https://
fetch ของ Node.js ตามการรีไดเร็กต์ไปยัง HTTPS แบบเงียบ ๆ
- API key จึงอาจถูกส่งออกไปแบบ plaintext และก่อให้เกิดความเสี่ยงด้านความปลอดภัย
- พบข้อผิดพลาดระหว่าง code review และแก้ไขปัญหาได้
หลักการ fail fast
- หาก API รีไดเร็กต์คำขอ HTTP ไปยัง HTTPS ก็อาจมองข้ามการพิมพ์ผิดได้ง่าย
- ควรยึดหลัก fail fast: การเรียก API ที่ไม่เข้ารหัสต้องล้มเหลวอย่างชัดเจน
- ทางที่ดีควรปิดใช้งาน HTTP interface ของเซิร์ฟเวอร์ API หรือส่งคืนข้อความผิดพลาดสำหรับคำขอ HTTP
กรณีศึกษาของ API อื่น ๆ
- API ชื่อดังหลายตัวส่งคืนข้อความผิดพลาด 403 สำหรับคำขอ HTTP หรือปิดการใช้งาน HTTP interface ไปเลย
- แต่อีกบาง API ก็ยังคงรีไดเร็กต์จาก HTTP ไป HTTPS
ความจำเป็นของแนวปฏิบัติที่ดี
- สำหรับแอปพลิเคชันที่ผู้ใช้ใช้งานโดยตรง การรีไดเร็กต์จาก HTTP ไป HTTPS เป็นเรื่องปกติ
- แต่ในกรณีของ API การรีไดเร็กต์จาก HTTP ไป HTTPS อาจเป็นผลเสียมากกว่า
- โครงการด้านความปลอดภัยอย่าง OWASP ควรมีแนวทางที่ชัดเจนสำหรับ API
บทสรุป
- API ไม่ควรรีไดเร็กต์จาก HTTP ไป HTTPS แต่ควรทำให้คำขอที่ไม่เข้ารหัสล้มเหลวอย่างชัดเจน
- หาก API key ถูกส่งผ่านการเชื่อมต่อที่ไม่เข้ารหัส ควรถูกเพิกถอนทันที
- ควรอัปเดตแนวปฏิบัติด้านความปลอดภัยของ API เพื่อให้มีคำแนะนำที่ชัดเจน
ความเห็นของ GN⁺
- ความจำเป็นในการเสริมความปลอดภัย: ความปลอดภัยของ API มีความสำคัญมาก และการรีไดเร็กต์จาก HTTP ไป HTTPS อาจสร้างช่องโหว่ด้านความปลอดภัยได้
- หลักการ fail fast: การยึดหลัก fail fast เป็นสิ่งสำคัญ เพื่อให้สามารถพบและแก้ไขข้อผิดพลาดได้ตั้งแต่ช่วงต้นของการพัฒนา
- การอัปเดตแนวปฏิบัติที่ดี: โครงการด้านความปลอดภัยอย่าง OWASP ควรจัดทำแนวทางที่ชัดเจนเกี่ยวกับความปลอดภัยของ API
- การเพิกถอนคีย์แบบอัตโนมัติ: API key ที่ถูกส่งผ่านการเชื่อมต่อที่ไม่เข้ารหัสควรถูกเพิกถอนโดยอัตโนมัติ
- อ้างอิงกรณีของ API อื่น ๆ: ควรศึกษากรณีด้านความปลอดภัยของ API อื่น ๆ เพื่อนำมาเสริมความปลอดภัยให้กับ API ของตนเอง
5 ความคิดเห็น
ดูเหมือนว่าเป็นประเด็นที่ควรถูกกำกับด้วยกฎหมาย
อย่างแรกเลย จดไว้ก่อน... ห้ามทำ https redirect ใน API
ในทางเทคนิคแล้วก็ถูกต้อง
แต่ลูกค้าองค์กรส่วนใหญ่มักมีแนวปฏิบัติด้านความปลอดภัยให้ส่งรีไดเรกต์ไปที่ https เสมอเมื่อมีการเข้าถึงผ่าน http
อีกทั้งพวกเขายังไม่ค่อยอยากให้ลูกค้าที่ใช้เว็บไซต์ของตัวเองเห็นหน้าจอข้อผิดพลาดด้วย ดังนั้นถ้าไม่ใช่บริการที่ให้บริการเอง สำหรับฝั่งผู้ส่งมอบงานก็คงเป็นเรื่องไกลตัวอยู่เหมือนกัน..
โอ๊ะ AI ดันพลาดแบบนี้ซะได้ 555 เลยแก้ไว้แล้วครับ
ความคิดเห็นบน Hacker News