เห็นมีคนถามทำ API อย่างไรให้ปลอดภัย
1.ใช้ TLS(https) จำเป็นมาก ๆ
2.ใช้พวก OAuth2 กรณีจะต้องใช้ Single Sign On(SSO) ด้วย เช่น OpenID
3.คุณจะต้องจัดเก็บข้อมูล OAuth ของผู้ใช้ อย่าจัดเก็บในตัวเครื่อง(Local Storage) ที่สามารถเข้าถึงได้โดย JavaScript ที่ทำงานอยู่บน Client Page นั้น ๆ ให้เก็บ Tokens เป็น Secure Cookie ที่ปลอดภัยแทนที่จะป้องกันการโจมตีแบบ cross-site scripting (XSS) อย่างไรก็ตาม Cookie อาจเสี่ยงต่อการปลอมแปลงคำขอข้ามไซต์ (CSRF) ดังนั้นคุณควรตรวจสอบให้แน่ใจว่า Cookie ของคุณใช้ Samesite=Strict
4. ใช้ API Key เพื่อให้ผู้ใช้งานเข้าถึงบริการระดับกรณีที่จะมา Program กับระบบเรา
5.ควรกำหนดให้มีระบบจัดการกับ Secret Key สำหรับ API Key หมายถึง กำลังพูดถึงการอนุญาต API ไม่จำเป็นจะต้องให้ API ใช้ได้กับทุกคำขอ ไม่จำเป็นเสมอไป คุณอาจต้องการเพิ่มการอนุญาตระดับคำขอ: ดูคำขอที่เข้ามาเพื่อตัดสินใจว่าผู้ใช้มีสิทธิ์เข้าถึงทรัพยากรของคุณหรือไม่ ด้วยวิธีนี้ คุณสามารถให้ทุกคนเห็นทรัพยากรใน directory ข้อมูล หรือเลือกคำขอบางประเภทที่ผู้ใช้ต้องได้รับการตรวจสอบสิทธิ์
6.กำหนดค่าการอนุญาตที่แตกต่างกันสำหรับ API Key ที่แตกต่างกัน เช่น Key นี้ให้ Read อีกอัน ให้ Write หรือทั้งสองอย่าง
7.ปล่อยให้การอนุญาตที่เหลือเป็น Business Logic ของ Application นั้น ๆ คือเวลาที่เรามีการเพิ่ม Logic เข้าไปใน Middleware มาก ๆ มันจะจบด้วยการ If ที่ซ้ำซ้อนซึ่งไม่ควรทำ
ปล่อยให้ Logic การอนุญาตระดับนั้นอยู่ใน Application Code ของคุณแทน การตรวจสอบสิทธิ์ใดๆ ที่ทำกับ Environment ควรเกิดขึ้นใน Application ไม่ใช่ใน Middleware หากคุณต้องการจัดการ Logic การอนุญาตที่ซับซ้อนในแอปของคุณ ให้ใช้เครื่องมือเช่น Oso ซึ่งจะช่วยให้คุณลด Policy การอนุญาตของคุณให้เป็นกฎง่ายๆ สองสามข้อ เป็นต้น ลดการกำหนดเงื่อนไขใน Library ที่น่าเชื่อถือ (Trust Library) เพื่อลดปัญหาข้อผิดพลาด การให้สิทธิ์เป็นเรื่องยุ่งยากเสมอ เราจำเป็นต้องลดจำนวนจุดที่จะเกิดความเสี่ยงที่อาจจะส่งผลกระทบทำให้ระบบมีช่องโหว่มากมายที่ตามแก้ไม่ครบครับ
#API #Secure #APIgateway #Rest #SSO #oauth2 #TLS #OWASP