ทุกวันนี้ Hacker มีเทคนิคที่สุดยอดมากกก
มากซะจนผมคิดว่า app และ web 50%
สามารถ hack ได้ในทางใดทางหนึ่ง
ส่วนหนึ่งน่าจะเป็นเพราะว่า
Developer ไม่รู้ว่าจะ Secure API อย่างไร
.
.
Security ของ API เป็นตัวชี้ชะตาของ app
ถ้า app ไม่ดังก็ไม่เท่าไหร่
แต่ถ้าเกิดดังขึ้นมา มีคนเล่นเยอะหน่อย
มันก็จะมีคนมาลองแฮ็คระบบ
ยิ่งถ้ามีของรางวัลล่อใจ ยิ่งลองของกันสนุกสนาน
ทำโปรแกรมเมอร์หมดอนาคตเลยนะบางที
.
.
โพสต์นี้จะสอนการออกแบบ security ของ API 6 ข้อ
ไม่ได้ strong ขนาด hack ไม่ได้ 100%
แต่ก็ไม่อ่อนขนาด ใครๆก็ hack ได้
และถ้า system ถูก hack ก็ต้องจำกัดความเสียหายได้
และเตือนไว้ก่อนเลยว่า post นี้ยาววววว
.
.
การออกแบบ API ให้คิดไว้เลยว่า โดนแน่ๆ
โดยเฉพาะ API ที่ใช้ร่วมกันระหว่าง mobile และ web app
ยิ่งต้องออกแบบอย่างเข้าใจธรรมชาติของ platform ที่ต่างกัน
.
.
เริ่มจากข้อ 1 สำคัญสุด ให้ใช้ https ทั้งหมดทุก request
เพื่อป้องกันคนเข้ามาแก้ข้อมูล request ระหว่างทาง
ถ้าเรียกมาเป็น http ให้ server reject request เลย
.
.
ข้อ 2 ใช้การ Authen ด้วย accessToken
การสร้าง accessToken ผมจะใช้ JWT ในการสร้าง
JWT = JSON Web Token
ถ้าสนใจ ผมแนะให้เพิ่ม shuffle key ซ้อนเข้าไปอีกชั้น
เพื่อทำให้ไม่สามารถดูข้อมูลใน JWT payload ได้ง่าย
เพราะ spec ของ JWT ใช้ base64encode
ซึ่งสามารถแกะห่อดูได้ง่ายเกิ๊นน
.
.
ใน accessToken ให้เก็บเฉพาะ UID อย่างเดียว
และ UID อย่าเอา ID ของ user มาใช้ตรงๆ
ให้ encrypt ID ให้กลายเป็น string ยาวๆก่อน
อย่าให้ hacker เดา UID คนอื่นได้
อ่านที่ผมเขียนดีๆ encrypt นะ ไม่ใช่ encode
เกิด hacker สามารถปลอม accessToken ได้
ก็ไม่รู้จะปลอมเป็นใครอยู่ดี
เพราะ UID มันเดาไม่ได้ ความน่าจะเป็นสูงเกิน
.
.
JWT จะยังเชื่อถือได้อยู่ถ้ายังไม่โดนโขมย secret key
เมื่อไหร่ก็ตามที่ key โดนโขมย
hacker จะปลอม token ได้ทันที
ให้คิดในแง่ร้ายที่สุดไว้ก่อนว่า มันอาจจะโดนโขมยได้
ต้องมี plan B เอาไว้จัดการเมื่อ key โดนโขมยไปแล้ว
.
.
ถ้า key JWT โดนโขมย จะต้องเปลี่ยน key ที่ฝั่ง server
สิ่งที่เกิดขึ้นคือ api ทั้งหมดจะส่งค่ากลับว่ายังไม่ได้ login
ทำให้ user ทุกคนถูก logout auto และต้อง login ใหม่หมด
.
.