เช้านี้เห็นมีการ share เรื่องระบบ API (Application Programming Interface) ของระบบ my SSO app
ซึ่งเมื่อได้เข้าไปลองใช้งานและทำการ decompile code ดูก็พบว่า
เป็นไปตามจาก post ข้างต้น
ในฐานะของนักพัฒนาคนหนึ่งคิดว่า เป็นสิ่งที่ทีมพัฒนาต้องให้ความสนใจและใส่ใจ ไม่ว่าจะด้วยเหตุผลใด ๆ ก็ตามเรื่องของ security เบื้องต้นของ app ไม่น่าจะพลาดมากมายขนาดนี้
มาดูว่าระบบเป็นอย่างไร ?
การพัฒนาใช้ Ionic framework สำหรับการพัฒนาแบบ hybrid app นั่นเอง ซึ่งทำให้ง่ายต่อการพัฒนาและพัฒนาครั้งเดียวได้ทุก platform code ที่พัฒนาคือ JavaScript ใน Angular framework นั่นแหละ และใช้ plugin เพิ่มเติมสำหรับการส่ง email เท่าที่ดูคือส่งไปหา helpdesk !! ที่สำคัญ code เหล่านี้มันก็อยู่ในมือถือของผู้ใช้ทุกคน ดังนั้นผมเลยเปิด code มาวิเคราะห์กันหน่อย โครงสร้างของ app ประกอบไปด้วย- Router
- Controller
- Service
- Directive
เริ่มที่ Controller เป็นส่วนควบคุมการทำงานต่าง ๆ
ทั้ง app ก็มีเพียง controller เดียวนี่แหละ แต่ละ function ก็จัดอยู่ในรูปแบบที่เรียกว่า Callback hell แสดงดังรูป ถ้าถามในมุมมองของการ maintain ก็น่ากลัวนิดหน่อย !! ส่วนข้อมูลต่าง ๆ จะเก็บไว้ใน local storage เช่น login แล้วเป็น admin หรือไม่ ? ทำการเก็บข้อมูล user id และ user name !!ต่อมาดูที่ Service ซึ่งเปิดมาครั้งแรกอาจจะต้องตกใจกันนิดหน่อย !!
จะเจอ ip ทั้ง test server และ localhost ใช้สำหรับการพัฒนา ส่วน production server ต้องเห็นอยู่แล้วเป็นปกติ พออ่าน code ลงมาเรื่อย ๆ ต้องสะดุดกับการเรียกใช้งาน APIs ซึ่งดูแล้วมันคือการส่ง HTTP GET และ POST แบบง่าย ๆ ไม่มีการส่งค่า token หรือ key อะไรไปเลย วิเคราะห์ง่าย ๆ คือ อยากได้ข้อมูล user information ก็ส่ง id ไปเลย ไม่ได้สนใจว่าใครจะเป็นคนร้องขอ ดังนั้นจึงลองเอา url มา copy ใส่ browser ก็ได้ข้อมูลออกมาเลย !! ส่วน id ก็ลองสุ่มมั่ว ๆ ก็ได้ข้อมูลออกมา ซึ่งเป็นสิ่งที่น่ากลัวอย่างมากคำถามคือ แล้วตรวจสอบ Authorization อย่างไร ? เท่าที่เห็นคือเก็บค่าใน local storage ไว้เท่านั้น !!ปล. ตอนนี้หน้า API เป็นแบบนี้แล้วนะ (ปิดระบบนั่นเอง) แสดงว่าทีมพัฒนาได้เห็นข่าวนี้หรือปัญหานี้แล้ว ซึ่งเป็นเรื่องที่น่าชื่นชมอย่างมาก แต่หน้า Error ยังไม่แก้ไขนะ นี่มัน .NET นะเนี่ย
ถามว่าจะแก้ไขอย่างไร
เริ่มต้นด้วยการ Authentication และ Authorization นะครับ Authentication คือการระบบตัวตนเช่นการ login Authorization คือการตรวจสอบสิทธิ์ในการใช้งาน resource ต่าง ๆ แต่ระบบ API ของระบบ my SSO นั้นมันเปิดเผยอย่างแรงครับ ไม่มีทั้ง Authentication และ Authorization เลย มีแต่ในระดับ app เท่านั้น !! ซึ่งแน่นอนว่า ในกรณีนี้ไม่ได้ช่วยอะไรเลย อย่าลืมว่า framework ที่ใช้พัฒนาคือ hybride และ source code ก็อยู่ในมือของผู้ใช้ทุกคน ดังนั้นมันสุ่มเสี่ยงต่อการโจมตีอย่างมาก !!ของฝากสำหรับทีมพัฒนาระบบงาน
ถ้าต้องการข้อมูลเพิ่มเติ่มสำคัญการออกแบบและพัฒนา ผมแนะนำบทความเรื่อง- [Geek] พื้นฐานความปลอดภัยในการเก็บข้อมูลและรับส่งข้อมูลบนแอพฯมือถือ
- [Geek] nonce, Signature และ https สามข้อพื้นฐานของการทำ API ฝั่ง Server
ปล. เรื่องของ security เป็นอีกหนึ่งเรื่องที่นักพัฒนา Software ต้องให้ความสำคัญนะครับ เพราะว่า Security มันคือ function การทำงานที่ต้องมีอยู่ในทุก ๆ featureReference Websites https://www.owasp.org/index.php/Mobile_Top_10_2016-Top_10