app-00
เช้านี้เห็นมีการ 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

ซึ่งเป็นโครงสร้างมาตรฐานของ Angular อยู่แล้ว

เริ่มที่ Controller เป็นส่วนควบคุมการทำงานต่าง ๆ

ทั้ง app ก็มีเพียง controller เดียวนี่แหละ
แต่ละ function ก็จัดอยู่ในรูปแบบที่เรียกว่า Callback hell แสดงดังรูป

app-01

ถ้าถามในมุมมองของการ 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 เป็นแบบนี้แล้วนะ (ปิดระบบนั่นเอง)
แสดงว่าทีมพัฒนาได้เห็นข่าวนี้หรือปัญหานี้แล้ว
ซึ่งเป็นเรื่องที่น่าชื่นชมอย่างมาก

app-02

แต่หน้า Error ยังไม่แก้ไขนะ นี่มัน .NET นะเนี่ย

app-03

ถามว่าจะแก้ไขอย่างไร

เริ่มต้นด้วยการ Authentication และ Authorization นะครับ
Authentication คือการระบุตัวตนเช่นการ login
Authorization คือการตรวจสอบสิทธิ์ในการใช้งาน resource ต่าง ๆ

แต่ระบบ API ของระบบ my SSO นั้นมันเปิดเผยอย่างแรงครับ
ไม่มีทั้ง Authentication และ Authorization เลย
มีแต่ในระดับ app เท่านั้น !!
ซึ่งแน่นอนว่า ในกรณีนี้ไม่ได้ช่วยอะไรเลย
อย่าลืมว่า framework ที่ใช้พัฒนาคือ hybride
และ source code ก็อยู่ในมือของผู้ใช้ทุกคน
ดังนั้นมันสุ่มเสี่ยงต่อการโจมตีอย่างมาก !!

ของฝากสำหรับทีมพัฒนาระบบงาน

ถ้าต้องการข้อมูลเพิ่มเติ่มสำคัญการออกแบบและพัฒนา
ผมแนะนำบทความเรื่อง

ปล. เรื่องของ security เป็นอีกหนึ่งเรื่องที่นักพัฒนา Software ต้องให้ความสำคัญนะครับ
เพราะว่า Security มันคือ function การทำงานที่ต้องมีอยู่ในทุก ๆ feature

Reference Websites
https://www.owasp.org/index.php/Mobile_Top_10_2016-Top_10