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

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

    The online casino for real money - Kalamba Hotels
    With over a 샌즈카지노 thousand games you 1xbet can enjoy in online casino games, there are countless types of online casinos. And you can enjoy the thrill of kadangpintar gambling

    ตอบลบ

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

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

รวมชุดคำสั่ง 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 Rd, Rr   :   copy ข้อมูลขนาด 1 byte จาก Rr ไว้ใน Rd movw Rd, Rr   :   copy ข้อมูลขนาด 2 bytes จาก Rr, Rr+1 ไว้ใน Rd, Rd+1 ldi   Rd, k   :   โหลดค่าใส่ register , k มีค่า 0 - 255 ld Rd, X   :   อ่านค่าตำแหน่งที่ X ชี้อยู่เก

รู้จักกับการออกแบบอินโฟกราฟิกส์ infographics design

      infographics คือการออกแบบโดยการใช้ภาพนิ่ง, ภาพเคลื่อนไหวหรือสัญลักษณ์แทนข้อความหรือข้อมูลต่างๆ ที่ต้องการจะสื่อความหมายถึงข้อความหรือข้อมูลนั้นโดยภาพนิ่ง, ภาพเคลื่อนไหวหรือสัญลักษณ์ที่ใช้แทนจะมีรูปแบบที่ผู้อ่านสามารถเข้าใจได้อย่างรวดเร็วและชัดเจน โดยไม่ต้องมีผู้นำเสนอมาช่วยขยายความอีก       infographics มาจากคำว่า information + graphics การนำเสนอข้อมูลแบบ infographics จะนำเสนอข้อมูลที่เข้าใจยาก ข้อมูลที่ตัวอักษรเยอะๆ ในรูปแบบสร้างสรรค์เข้าใจได้ง่าย เช่น ภาพ ลายเส้น แผนภูมิ แผนที่ ฯลฯ สามารถสื่อข้อมูลนั้นออกมาได้อย่างชัดเจน มีองค์ประกอบที่สำคัญ        ตัวอย่างการนำเสนอข้อมูลแบบ infographics http://www.alychidesigns.com/30-templates-and-vector-kits-to-design-your-own-infographic กระบวกการออกแบบดีไซน์ infographics โดย Hyperakt's Josh Smith  1. รวบรวมข้อมูล รวบรวมข้อมูลทุกอย่างเกี่ยวกับสิ่งที่จะนำเสนอโดยข้อมูลที่ดีควรเป็นข้อมูลดิบจากต้นฉบับและควรเก็บรวบรวมลิ้งค์ข้อมูลไว้ด้วย 2. การอ่านข้อมูลทั้งหมด การออกแบบอินโฟกราฟิกต้องมีทักษะในการจัดการข้อมูลและต้องแน่ใจว่าข้

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

วันนี้จะมาแนะนำทุกๆ คนเกี่ยวกับ การเขียนโปรแกรมง่าย ๆ เพื่อให้คอมพิวเตอร์อ่านออกเสียงตามที่เราได้พิมพ์ให้ โดย ใช้ library คือ gTTS และ play sound จะมีวิธีการเขียนอย่างไร มาดูกันเลย เริ่มจากติดตั้ง package gTTS และ play sound ก่อน                                                                          pip install gTTS                                                                                pip install playsound                                                                                                                                                                               จากนั้น เรามาเริ่มเขียนโปรแกรมกันเลย โดยการทำงานของโปรแกรมนี้คือ โปรแกรมจะรับค่าข้อความจากผู้ใช้ จากนั้น เรียกใช้ library gTTS โดยส่งข้อมูลคือ ข้อความ และ ภาษา สำหรับการแปลงข้อความเป็นเสียงผ่าน google translate API แล้วจากนั้นจึงทำการ save ข้อมูลลงไปยัง file ชื่อ "sound.mp3" ต่อมาไฟล์จะถูกเล่นโดย playsound เป็นเสียงให้เราได้ยินกัน และในบรรทัดสุดท้ายเป็นการลบไฟล์ที่บัน