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

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

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

    ตอบลบ

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

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

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

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

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

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

การทำ Vulnerability Scanning ด้วย ZAP ( Zed Attack Proxy )

Vulnerability Scanning (การสแกนหาช่องโหว่) Vulnerability Scanning คือกระบวนการตรวจสอบระบบโดยอัตโนมัติเพื่อค้นหาช่องโหว่ด้านความปลอดภัย เช่น การตั้งค่าที่ผิดพลาด, ซอฟต์แวร์ที่ล้าสมัย หรือโค้ดที่อาจมีปัญหา ลักษณะของ Vulnerability Scanning ใช้ เครื่องมืออัตโนมัติ เช่น OWASP ZAP, Nessus, OpenVAS มุ่งเน้นการ ระบุช่องโหว่ที่มีอยู่ แต่ไม่ทำการโจมตีเพื่อทดสอบ มีการจัดอันดับความร้ายแรงของช่องโหว่ เช่น Low, Medium, High, Critical สามารถใช้ ทำซ้ำได้ง่าย และเหมาะสำหรับการตรวจสอบ Compliance (มาตรฐานความปลอดภัย) ตัวอย่างช่องโหว่ที่ตรวจพบ การตั้งค่าที่ไม่ปลอดภัย (Security Misconfigurations) การเปิดใช้โปรโตคอลที่ล้าสมัย เช่น TLS 1.0 ซอฟต์แวร์ที่ไม่ได้รับการอัปเดต ช่องโหว่ในโค้ด เช่น SQL Injection, XSS OWASP ZAP (Zed Attack Proxy) เป็นเครื่องมือโอเพนซอร์สที่ถูกพัฒนาโดย OWASP (Open Web Application Security Project) สำหรับการทำ Security Testing โดยเฉพาะการตรวจสอบช่องโหว่ (Vulnerability Assessment) ใน เว็บแอปพลิเคชัน โดย ZAP ทำหน้าที่เป็น Proxy Server ที่ดักจับและวิเคราะ...