In the last article, I talked about how to strengthen the outer shell of your app with a stronger pin. Now it’s time for how to make your inner shell stronger. We’re talking about secure API.

Since secure API is a long story, I decide to split this episode into 2 parts. The first one we will discuss the concept and the things we have to look out for. The latter, which will be the next article, is how to implement it via Flutter.

Here’s the checklist that you need to implement before securing the API for backend, including the…


จากบทความครั้งที่แล้วที่ได้เขียนไว้เกี่ยวกับการสร้างความแข็งแกร่งให้กับแอปภายนอก ในบทความนี้เราจะมาพูดถึงการทำให้แอปแข็งแกร่งจากภายใน คือการ Secure API หรือการทำให้ API ปลอดภัยนั่นเอง

เนื่องจากบทความนี้จะค่อนข้างยาว ผมจึงจะขอแบ่งออกเป็น 2 ส่วน ส่วนแรกจะอธิบายถึงคอนเซ็ปต์และการเตรียมตัวก่อนทำการ Secure API ส่วนที่สองจะเป็นวิธีการ Implement บน Flutter ซึ่งจะอยู่ในบทความหน้าครับ มาเริ่มกันด้วย Checklist ที่เราควรจะต้องทำก่อนที่จะมี Secure API โดยที่ส่วนใหญ่จะเป็นทางด้านของ Backend เป็นหลัก ดังนี้

จำเป็น

  1. ให้ใช้ SSL Certificate และรับ HTTPS เท่านั้น ห้ามรับ Request ใดๆ จาก HTTP
  2. ให้ใช้ TLS 1.2 ขึ้นไป เพราะ 1.0, 1.1 เลิกรองรับแล้ว (ref)
  3. ให้ใช้ Unique userID อย่าเอา userID ที่ได้จากพวก SQL มาใช้ตรงๆ นะครับ เช่น อย่าใช้…
userID = 1

แต่ให้ใช้…

userID = C72E77A3D892BA02F2214E3F10

ไม่งั้นเราสามารถโดนยิง userID ได้ง่ายๆ ก็แค่เปลี่ยนตัวเลขไปเรื่อยๆ

4. …


In this episode, we will strengthen your mobile app even further. “But how?” You may wonder. Let’s compare it to building a house. To ensure that it’s equipped with the highest level of security, you would probably need to install all the alarms and cameras around the house. But none of that would matter if you happen to leave the key at the door! With security, we need to consider every possibility that a bad hacker might choose to attack, so it’s not just one solution, and boom, everything is done. …


เราจะสามารถทำให้ Security ของแอปพลิเคชันมือถือเราแข็งแกร่งมากขึ้นได้อย่างไรบ้าง? ลองมองง่ายๆ ครับ การที่บ้านของเราจะปลอดภัยได้ สิ่งที่เราคิดถึงเป็นลำดับต้นๆ อาจจะเป็นการติดกล้องวงจรปิด ติดสัญญาณกันขโมย ติดเซ็นเซอร์หลายๆ อย่าง เท่านี้ก็น่าจะแน่นหนาเพียงพอ แต่เจ้ากรรม ดันลืมไปว่าทิ้งกุญแจไว้ที่ลูกบิด! ดังนั้นสิ่งหนึ่งที่ต้องจำคือ Security ไม่ใช่ว่าเราทำอย่างเดียวแล้วแก้ได้ทุกอย่าง แต่เราจะต้องหาทางปิดความเป็นไปได้ทุกช่องทางไม่ให้เกิดรูรั่วหรือจุดอ่อนที่คนจะลอบเข้าบ้านได้ เราจึงต้องหาทางป้องกันทั้งจากภายนอกและภายในบ้านของเราครับ

บทความอีพีที่แล้วที่พูดถึง SSL Pinning เปรียบเสมือนการสร้างกำแพงสูงพร้อมด้วยลวดหนามที่ทำให้โจรปีนบ้านได้ยากขึ้น แต่ก็ใช่ว่าจะปีนไม่ได้อยู่ดี บทความนี้เราจึงจะมาดูกันต่อว่าทำยังไงไม่ให้ทุกคนลืมกุญแจค้างไว้ที่หน้าบ้าน เนื่องจาก iOS และ Android นั้นมีวิธีการป้องกันแอปของตัวเองเบื้องต้นให้แล้ว เราจะใช้ Native API เพื่อการณ์นี้กันครับ โดยขอแบ่งเนื้อหาออกเป็น 2 ส่วน คือส่วนที่ “จำเป็นต้องมี” กับส่วนที่ “มีก็ดี ไม่มีก็ได้”

จำเป็นต้องมี

1. Secure Data Storage

ในการบันทึกข้อมูลต่างๆ ลงเครื่องจะมีหลักสำคัญอยู่ 2 ข้อ…


Flutter is cross-platform mobile development. Write only once and you can deploy it to both iOS and Android. Yet, some native mobile developers refuse to learn Flutter simply because it’s not native. That’s the number one reason that always comes up whenever I ask if they would give Flutter a try. I don’t blame them though, I was once just like them. “I’m an iOS developer, why do I have to write Flutter?” However, after spending some time with Flutter thanks to work assignments, I fell in love with it — not for the language nor framework, but for the…


Flutter เป็นการพัฒนาแอปแบบ Cross Platform ที่เขียนโค้ดแค่ครั้งเดียว ก็สามารถนำไปใช้กับทั้ง iOS และ Android ได้ ทั้งนี้ผมเคยเจอคนหลายคนที่เขียน Native บอกว่าไม่เห็นมีความจำเป็นที่จะต้องใช้ Flutter หรือต้องมาเรียนรู้เลย เพราะพอไม่ใช่ Native เราไม่รู้ว่าจะไปได้ไกลแค่ไหนในอนาคต จึงเป็นเหตุผลอันดับ 1 ที่ทำให้ Flutter ไม่น่าสนใจ ผมเองก็เคยเป็น 1 คนที่มองว่า Cross Platform นั้นไม่มีจุดยืนหรอก เพราะผมเขียน iOS ได้อยู่แล้ว ทำไมต้องไปใช้เวลากับ Flutter ด้วย แต่หลังจากที่ได้ถูกมอบหมายงานที่ต้องใช้ Flutter มาและลองเขียนเอง กลับเปลี่ยนมุมมองของผม กลายมาเป็นแฟนคลับ Flutter เพราะเราสามารถควบคุมคุณภาพของ iOS และ Android ให้ออกมาได้เหมือนกัน Business Logic ที่มาจากที่เดียวกัน ไม่มีความเพี้ยนของการ Implement ที่ไม่ถูกของแต่ละแพลตฟอร์ม ช่วยให้ทีมเล็กๆ สามารถสร้าง Product ขนาดใหญ่ได้ Flutter นั้นมีความน่าสนใจทั้งเรื่อง Performance ของแอปและภาษาที่ใช้ จากที่ผมเคยใช้ พบว่าได้ Performance ถึง 85–90 % ของ Native เลย อย่างไรก็ตามผมยังชอบ iOS และ Swift อยู่นะครับ ทั้งการใช้ Enum และ Protocol Extension แม้ว่าจะมาเขียน Flutter ก็ตาม…


Due to the COVID-19 pandemic, we’re seeing high increase in mobile app’s usage. Developers have to constantly keep up with new features or improve better user experience. With everything going online now, more and more money is pouring into this industry, which naturally bad guys (a.k.a. bad hackers) are looking to take advantage of it. I’m sure we’re all aware of design thinking and how to empathize with the user because how else would you expect users to love our products if we never use it, or worse, like it? It’s time to put yourself in someone else’s shoes. In…


เมื่อสถานการณ์โควิดส่งผลให้ทุกภาคส่วนทั่วโลกพยายามทำทุกอย่างให้เป็นดิจิทัลมากขึ้น ผู้พัฒนาต้องหมั่นเรียนรู้เทคโนโลยีใหม่เพื่อพัฒนา User Experience ให้ดียิ่งขึ้นตามไปด้วย ปัจจุบันเราจะเห็นว่าสิ่งของจำนวนมากเริ่มถูกทำให้เป็นออนไลน์มากขึ้น แม้กระทั่งเครื่องใช้ไฟฟ้าในบ้านอย่างตู้เย็นเอง บางทีก็ทำให้รู้สึกหวั่นๆ ว่าจะเสี่ยงต่อการโดนดักฟังข้อมูลโดยเหล่าแฮกเกอร์หรือมิจฉาชีพหรือไม่

ใครที่เคยเรียนเกี่ยวกับ Design Thinking จะต้องรู้จักกับสิ่งที่เรียกว่า Empathy หรือความเห็นใจคนอื่น การที่เราจะสร้างผลิตภัณฑ์อะไรสักอย่างให้ลูกค้า เราควรทดลองใช้เองก่อนทุกครั้ง เพราะถ้าเรายังไม่เคยใช้ หรือยังไม่ชอบของที่ทำเอง เราจะคาดหวังให้คนอื่นมาชอบของที่เราใช้ได้อย่างไร? …


เมื่อวันพฤหัสบดีที่ 4 มีนาคม 2564 ที่ผ่านมาทาง Google ได้จัดงาน Flutter Engage ขึ้นเป็นปีแรก ซึ่งก่อนจะถึงวันงานก็มีการเค้าท์ดาวน์ล่วงหน้า 30 วันให้ได้ผู้ชมลุ้นกันว่าในงานจะมีประกาศพิเศษอะไรรึเปล่า และเมื่อวันสำคัญนั้นมาถึง Flutter ก็ได้การประกาศว่าจะกลายเป็น 2.0 แล้ว! Flutter 2.0 นี้จะมีอะไรใหม่ๆ บ้าง ทำไมคนถึงตื่นเต้น มาดูกันครับ

ไปเล่นกันได้ที่ https://dashatar-dev.web.app

Web

Flutter Web จะกลายเป็นตัวเวอร์ชันเต็ม (Full Version) แล้วครับ ไม่ใช่ Beta อีกต่อไป ทั้งนี้ยังไม่ได้มีการรีวิวออกมาว่าเวอร์ชันเต็มสามารถใช้งานได้ขนาดไหน แต่ถ้า Google มั่นใจพอที่จะออกตัวนี้มา ผมคิดว่าเวอร์ชันนี้น่าจะสามารถทำงาน Production ได้แล้วครับ

Sound Null Safety

Flutter 2.0 มาพร้อมกับ Dart 2.12 แต่ Lib จะต้องอัพเกรดตามด้วยจึงจะใช้งานได้ ตัวนี้อาจจะยังไม่แนะนำให้รีบใช้ครับ เพราะว่า Flutter พึ่งพา Lib ค่อนข้างเยอะ ขนาดกล้องยังนับเป็น Lib เลย ทำให้ถ้า Production App ของคุณเป็นอันเก่า อาจจะต้องใช้เวลากว่า 3–4 เดือนกว่าจะอัพเกรดได้ ต้องให้คนพัฒนา Lib ค่อยๆ ทยอยอัพเกรดกันหมดถึงจะได้ครับ

ส่วน Null Safety ดียังไง? …


Flutter Framework

ย้อนกลับเมื่อวันที่ 10 ตุลาคม ปี 2563 ทาง Google Thailand ได้มีการจัดงาน GDG DevFest Bangkok 2020 ขึ้นที่โรงแรม Carlton Hotel Bangkok Sukhumvit ปกติแล้ว KBTG มักจะสปอนเซอร์งานสำหรับผู้พัฒนาอื่นๆ อยู่เสมอ ครั้งนี้ก็เช่นกันครับ เราได้มีโอกาสเข้าไปแบ่งปันความรู้จากการทำงานฝั่ง Banking ที่มีความเข้มงวดด้าน Security สูงเป็นพิเศษ โดยมีตัวแทนจาก KBTG ขึ้นไปพูดด้วยกัน 2 คน คนแรกคือคุณต่อ ทัศพล (Tassapol A.) ที่นำความรู้จากการทำงานบริษัท Silicon Valley มาหลายที่ เช่น Apple, Apache, VMware มาแชร์ให้ฟังว่าเป็นอย่างไร รวมถึงการนำกระบวนการทำงานสเกลระดับโลกมาประยุกต์ใช้ใน KBTG ส่วนตัวแทนคนที่ 2 คือผมเองครับ ในฐานะหนึ่งในสมาชิกทีมนักพัฒนา MAKE by KBank แอป Mobile Banking ตัวใหม่ล่าสุดของ KBTG ผมได้หยิบประสบการณ์การใช้ Flutter พัฒนาแอปตัวนี้มาเล่าให้ผู้ร่วมงานฟัง ทั้งนี้ผมเชื่อว่ายังมีอีกหลายคนที่สนใจศึกษาเกี่ยวกับ Flutter แต่อาจจะไม่ได้เข้าร่วมงานดังกล่าว ผมจึงขอรวบรวมเนื้อหามาฝากกันอีกสักครั้งในบทความนี้ครับ

Native คืออะไร?

คือการพัฒนา Mobile Application ด้วยภาษาและเครื่องมือที่ทางเจ้าของ Mobile Device ได้จัดเตรียมไว้ให้ อย่างฝั่ง Apple ภาษาที่ใช้จะเป็น Swift หรือ Objective C ทำบนเครื่องมือที่ชื่อว่า Xcode ในขณะที่ฝั่ง Google จะใช้ภาษา Kotlin หรือ Java เครื่องมือที่ใช้ในการพัฒนาจะมีหลากหลายกว่า แต่ที่ Google แนะนำนั้นจะเป็น Android Studio…

Amorn Apichattanakul

Software Engineer focusing on Mobile technology

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store