ข้ามไปที่เนื้อหาหลัก

Python Web Dev: เสริมความปลอดภัยด้วยการเข้ารหัสกับ JWT กับ PyJWT

การส่งข้อมูลระหว่างกันของเซิร์ฟเวอร์โดยปกตินั้นสามารถถูกดักจับได้ด้วยผู้ไม่หวังดี จึงมีสิ่งหนึ่งที่เข้ามาช่วยแก้ปัญหาด้านนี้ได้บ้างก็คือ "การเข้ารหัสข้อมูล (encoding data)" ด้วยเหตุนี้เองในบล็อคนี้ ผมจึงมาแนะนำการเข้ารหัสในรูปแบบหนึงซึ่งเรียกว่า JWT มันคืออะไรนั้นมาดูกันเลย
JWT ย่อมาจาก JSON Web Token เป็นมาตรฐานเปิด (RFC7519) ที่เข้ามาแก้ปัญหาการส่งข้อมูลระหว่างกันอย่างปลอดภัยโดยที่ถูกออกแบบให้มีขนาดที่กระทัดรัดและเก็บข้อมูลภายในตัวมีหน้าตาเป็นชุดตัวอักษรชุดหนึ่งแบ่ง เป็น 3 ส่วน 
1. Header คือส่วนที่บอกว่าข้อความชุดนี้เข้ารหัสเแบบใดอยู่ หรือมีข้อกำหนดอะไรอยู่บ้าง
2. Payload เก็บข้อมูลจริง ๆ เช่น User ID, Roles ของผู้ใช้, E-mail ผู้ใช้เพื่อระบุตัวตน 
3. Signature เป็น digital signed เอาไว้ตรวจสอบว่า token ถูกสร้างขึ้นมาอย่างถูกต้องเพราะข้อมูลใน payload นั้นสามารถเปลี่ยนแปลงโดยบุคคลที่สามหากมีการเปลี่ยนแปลงข้อมูลขึ้นมาจะทำให้ signature ไม่ตรงกันกับ token ดังกล่าวจะถูกตรวจพบว่าไม่น่าเชื่อถือและไม่นำมาใช้งานในระบบ
จากรูปจะแสดงส่วนประกอบต่างๆของ JWT ประกอบไปด้วยส่วน header เก็บข้อความที่บอกว่าข้อความ ชุดนี้จะถูกเข้ารหัสโดยใช้อัลกอริทึม HS256 ข้อมูลใน payload ประกอบไปด้วย subname และ admin ส่วน signature คือ secret แม้ payload ที่ส่งระหว่างกันจะถูกเข้ารหัสไว้ payload นั้นก็ยังคงสามารถถอดรหัสได้ดังนั้นการเก็บข้อมูล ใน payload ควรเก็บข้อมูลที่จำเป็นในการระบุตัวตนเท่านั้นไม่ควรเก็บข้อมูลสำคัญอย่างเช่น password, รหัสบัตร ATM เป็นต้น อย่างไรก็ตามการใช้ JWT ในการแลกเปลี่ยนข้อมูลระหว่าง application กับ server ยังคงมีความปลอดภัยต้อการเข้าใช้งานระบบกล้องวิดีโอวงจรปิดเนื่องจาก token ดังกล่าวมีเวลาหมดอายุการใช้งาน
ตัวอย่างการเขียนโค้ด การเข้ารหัสแบบ JWT ด้วยภาษา python กับ PyJWT
ก่อนอื่นต้องติดตั้ง package ก่อนนะครับ
                                                                       pip install PyJWT                                                                                                           

จากนั้นลองสร้างไฟล์ ตามนี้แล้วลอง run ดูนะครับ
จะเห็นว่า ข้อมูลของเราจะถูกเปลี่ยนแปลงเป็นข้อความอะไรก็ไม่ทราบแตกต่างจากข้อมูลจริงของเราอย่างมากด้วยเหตุนี้เองทำให้การส่งข้อมูลระหว่างเซิร์ฟเวอร์ของเราจะปลอดภัยมากขึ้นครับ
ศึกษาเพิ่มเติม : PyJWT , JWT.io

ความคิดเห็น

  1. ไม่ระบุชื่อ25 มกราคม 2565 เวลา 02:05

    ความคิดเห็นนี้ถูกลบโดยผู้ดูแลระบบของบล็อก

    ตอบลบ

แสดงความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การทำ Performance Testing ด้วย Postman

Performance Test คืออะไร? Performance Test คือการทดสอบซอฟต์แวร์หรือระบบ เพื่อประเมินความสามารถในการทำงานเมื่อมีภาระหรือโหลดต่างๆ เข้ามาในระบบ เช่น จำนวนผู้ใช้ที่เพิ่มขึ้น, ปริมาณข้อมูลที่ถูกประมวลผล หรือความซับซ้อนในการทำงานของระบบ เหตุผลที่ต้องทำ Performance Test วัดความเร็วของระบบ (Speed) ช่วยให้ทราบว่าระบบสามารถตอบสนองต่อการร้องขอ (request) ได้เร็วเพียงใดในสภาวะการใช้งานที่หลากหลาย ไม่ว่าจะเป็นเมื่อมีผู้ใช้จำนวนน้อยหรือมาก ประเมินความเสถียร (Stability) ตรวจสอบว่าระบบสามารถทำงานได้ต่อเนื่องภายใต้การทำงานหนักหรือโหลดที่สูง เช่นในช่วงที่มีจำนวนผู้ใช้เพิ่มขึ้นอย่างมาก หรือในสถานการณ์ที่ต้องประมวลผลข้อมูลจำนวนมาก ปรับปรุงประสิทธิภาพ (Optimization) ช่วยให้ระบุจุดอ่อนของระบบ เช่น API ที่ทำงานช้า หรือการใช้ทรัพยากรมากเกินไปในบางส่วน ซึ่งสามารถปรับปรุงได้เพื่อเพิ่มประสิทธิภาพ เตรียมพร้อมสำหรับการใช้งานจริง (Real-World Readiness) การทดสอบช่วยให้เราทราบถึงการตอบสนองของระบบในสภาวะที่ใกล้เคียงกับการใช้งานจริง เพื่อให้มั่นใจว่าเมื่อปล่อยระบบให้ผู้ใช้ใช้งาน จะไม่เกิดปัญหาการโหลด...

Python: Chat bot &Text to Speech ภาษาไทย ด้วย gTTS

วันนี้จะมาแนะนำทุกๆ คนเกี่ยวกับ การเขียนโปรแกรมง่าย ๆ เพื่อให้คอมพิวเตอร์อ่านออกเสียงตามที่เราได้พิมพ์ให้ โดย ใช้ library คือ gTTS และ play sound จะมีวิธีการเขียนอย่างไร มาดูกันเลย เริ่มจากติดตั้ง package gTTS และ play sound ก่อน                                                                          pip install gTTS                                                                                pip install playsound                                                    ...

รวมชุดคำสั่ง Assembly ของ AVR

บทความนี้ได้รวบรวมชุดคำสั่งภาษา assembly ของไมโคคอนโทรลเลอร์ตระกูล AVR และสรุปการใช้งานเป็นภาษาไทยอย่างง่ายหากมีข้อผิดพลาด ขออภัยด้วยครับ ชุดคำสั่งทางคณิตศาสตร์และลอจิก add Rd, Rr   :   Rd + Rr เก็บผลลัพธ์ไว้ใน Rd adc Rd, Rr   :   Rd + Rr + Carry flag  เก็บผลลัพธ์ไว้ใน Rd mul Rd, Rr   :   Rd x Rr ได้ผลลัพธ์เป็น 16 bit เก็บไว้ใน R0, R1 sub Rd, Rr   :   Rd - Rr เก็บผลลัพธ์ไว้ใน Rd sbc Rd, Rr   :   Rd - Rr - Carry flag  เก็บผลลัพธ์ไว้ใน Rd and Rd, Rr   :   Rd and Rr แบบ bit ต่อ bit or Rd, Rr   :   Rd or Rr แบบ bit ต่อ bit eor Rd, Rr   :    Rd exclusive or Rr แบบ bit ต่อ bit com Rd   :   complement (กลับบิต) Rd neg Rd   :   2'complement (ติดลบ) Rd inc Rd   :   Rd++ dec Rd   :   Rd-- clr Rd   :   เคลียร์ bit Rd เป็น 0 ชุดคำสั่งเคลื่อนย้ายข้อมูล mov R...