ปีนี้งาน WWDC 2021 ยังจัดเป็น Digital อยู่นะครับ เนื่องจากสถานการณ์โควิด-19 ที่ระบาดทั่วโลก หลักๆ ในงานจะมี 2 Sessions ที่สำคัญ คืองาน Keynote ที่ทาง Apple จะประกาศรายละเอียดของ iOS 15 และ OS ใหม่ที่จะมีมาอัพเดตกัน และงาน State of the Union ซึ่งจะอธิบายรายละเอียดของ OS ตัวใหม่ในมุมมองของนักพัฒนา ในบทความนี้ผมขอเล่าให้ฟังแค่ในส่วนของ Keynote มาเริ่มกันเลยครับผม


After we explore the concept of secure API and what we need to prepare before implementing it, this last chapter of the mobile security series will show you how to implement via coding in Flutter. We will go through the five steps of Digital Signature:

  1. Key Exchange
  2. Encrypt Body
  3. Create Hashing Signature
  4. Decrypt Body
  5. Check Code Integrity From Signature

I will show you only the first four because they are implemented via client-side, while the last one is from backend.

Key Exchange

You can use any lib from this link.

Here’s the sample of the handshake function.

After you run this…


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

  1. Key Exchange
  2. Encrypt Body
  3. Create Hashing Signature
  4. Decrypt Body
  5. Checking Code Integrity From Signature

ผมขอโชว์ 4 ข้อแรกให้ดู เพราะข้อสุดท้ายจะเป็นทางด้านของ Backend

Key Exchange

สามารถใช้ Lib ตามด้านล่างได้เลยครับ อันนี้จะเป็นของ curve25519

ด้านล่างคือตัวอย่างของโค้ด Handshake

ซึ่งฟังก์ชันนี้จะเป็นสิ่งแรกที่เราจะใช้เมื่อ Client ได้ทำการเชื่อมต่อกับ Backend เมื่อโค้ดส่วนนี้ทำงาน เราจะได้ String กลับมา ซึ่งเราจะใช้เป็น Key ในการทำ Encrypt ข้อมูลทุกประเภทก่อนส่งไปให้เซิร์ฟเวอร์ครับ อย่าบันทึก Key นี้ลงในเครื่องนะครับ Key จะใช้ได้จนถึง Token หมดอายุ

Encrypt Body, Create Hashing Signature and Decrypt Body

ตามหลักการคือเราเข้ารหัสข้อมูลทุกประเภทที่จะส่งไปให้เซิร์ฟเวอร์ด้วย Key ที่ได้จากการ Handshake ใช้คู่กับ IV ที่เก็บใน Memory ของเครื่อง ส่วนนี้ห้ามทำการบันทึกไว้เช่นกัน เสร็จแล้วให้ส่งข้อมูลที่เข้ารหัส พร้อมกับค่า Nounce และ TimeStamp เพื่อป้องกัน Replay Attack และส่ง Content ที่ทำการ Hash แล้วไปด้วย เพื่อทำการเช็คความถูกต้องของข้อมูลว่าไม่ได้ถูกทำการแก้ไขใดๆ จากนั้นทางเซิร์ฟเวอร์จะส่งข้อมูลกลับมา โดยข้อมูลดังกล่าวจะถูกทำการเข้ารหัสเช่นเดียวกัน เราจะต้องทำการถอดรหัสก่อนที่จะนำข้อมูลมาใช้ ซึ่งตรงส่วน Client ไม่ต้องเช็ค Replay Attack หรือ Integrity ใดๆนะครับ เพราะเราเชื่อเซิร์ฟเวอร์ได้ว่าไม่ถูกทำการปลอมแปลง ด้านล่างที่เห็นจะเป็น Sample…


สวัสดีครับทุกท่าน บทความนี้จะเป็นบทความเกี่ยวกับ Google I/O 2021 ที่ได้จัดไปสดๆ ร้อนๆ เมื่อวันที่ 18 พฤษภาคม 2021 ผมได้มานั่งถอดรหัสกับน้องๆ Android ที่ KBTG คุยกันว่าจะเป็น Event ที่ดูน่าสนุก ได้มานั่งฟังไลฟ์สดกัน ในเมื่อคนอื่นเขาดูบอลกันข้ามคืนได้ เราก็ต้องดูงาน Google I/O ข้ามคืนได้เช่นกัน!!!

พวกเราล้วนตั้งตารอ คาดเดากันไปต่างๆ นานาว่าปีนี้ Google จะมีอะไรมาให้พวกเราเหล่า Developer เล่นกันอีก เมื่อคืนพวกเราเตรียมตัวพร้อมครับ กาแฟไม่ต้อง เพราะหัวใจน่าจะเต้นแรงตลอดทั้งงานอยู่แล้ว 😄 วันแรกของงานจะมีอะไรบ้าง มาดูกันเลยครับ

Opening Intro with Blob Opera

Google I/O Keynote

มาประเดิมกันด้วย Google Map ที่สามารถใช้เส้นทางจักรยานได้แล้ว


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 ก็ตาม…

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