คุกกี้: ในเวอร์ชันเริ่มต้นของพวกเขาไฟล์ข้อความที่มีลูกค้าที่ไม่ซ้ำกัน Id ข้อมูลอื่น ๆ ที่จำเป็นเกี่ยวกับลูกค้า (เช่นบทบาท)
key-value
แต่เดิมนั้นมีการจัดการกับtuples เพื่อรักษาข้อมูลที่เกี่ยวข้องกับกิจกรรมของลูกค้า นี้การเก็บรักษาเป็นสิ่งที่เรารู้ว่าเป็นเซสชั่นหรือสถานะโปรแกรม โดยพื้นฐานแล้วพวกเขาถูกสร้างขึ้นเพื่อรักษาสถานะของเว็บแอปพลิเคชัน โดยเฉพาะอย่างยิ่งสถานะบนฝั่งไคลเอ็นต์ (1)
โดยทั่วไปแล้วคุกกี้จะถูกตั้งค่าโดยเซิร์ฟเวอร์ผ่านส่วนหัวตอบกลับ ( Set-Cookie key=value
) อย่างไรก็ตามลูกค้าสามารถตั้งค่าได้เช่นกัน ตัวอย่างเช่นโดย DOM ( document.cookie
)
สิ่งสำคัญประการหนึ่งที่ควรทราบเกี่ยวกับคุกกี้คือพวกเขาไม่ได้ระบุผู้ใช้ พวกเขาค่อนข้างเชื่อมโยง TERNA ข้อมูล - ไคลเอนต์ - เซิร์ฟเวอร์ (3)
เรามักจะเชื่อมโยงคุกกี้กับไฟล์เพราะในช่วงแรก ๆ ของเว็บเบราว์เซอร์พวกเขาจะต้องคงอยู่คุกกี้อย่างใดเป็นไฟล์ที่ได้รับการสนับสนุนที่เป็นไปได้มากที่สุด เบราว์เซอร์ของวันนี้จัดเก็บคุกกี้ (เหนือสิ่งอื่นใด) ในการจัดเก็บในท้องถิ่น (ฐานข้อมูลแบบฝัง)
เซสชัน: เฉพาะรหัสลูกค้าที่ไม่ซ้ำกันเท่านั้นที่ส่งในไฟล์ (เรียกอีกอย่างว่าคุกกี้) ทุกอย่างจะถูกเก็บไว้บนเซิร์ฟเวอร์
โดยเซสชั่นผมคิดว่าคุณหมายถึงการประชุมเซิร์ฟเวอร์ ตามที่ฉันแสดงความคิดเห็นเซสชันสามารถนำมาใช้ในฝั่งลูกค้าด้วย ความแตกต่างกับเซสชันฝั่งไคลเอ็นต์คือข้อมูลถูกเก็บไว้ที่ไหนสักแห่งบนฝั่งเซิร์ฟเวอร์ (2)ในสถานการณ์ดังกล่าวสิ่งที่เราได้รับคือรหัสเซสชัน และเราได้มาในรูปของคุกกี้ หากไม่มีรหัสเซสชันเซิร์ฟเวอร์จะไม่สามารถเชื่อมโยงคำขอขาเข้ากับกิจกรรมก่อนหน้าของลูกค้า (3) ตัวอย่างเช่นผู้ใช้ที่ผ่านการรับรองความถูกต้องตะกร้าสินค้า ฯลฯ
ในกรณีใด ๆ ID เซสชันไม่จำเป็นต้องระบุผู้ใช้ มันเชื่อมโยงสถานะแอปพลิเคชันเฉพาะกับเว็บไคลเอ็นต์ เซสชันอาจมีหรือไม่มีข้อมูลผู้ใช้
ในการกระจายแอพพลิเคชั่นเซสชั่นควรจะต่อเนื่องได้ด้วยเหตุผลที่ชัดเจน หากถูกเก็บไว้ในหน่วยความจำการจัดเก็บในหน่วยความจำ (ส่วนประกอบ) ควรเป็นแบบอนุกรม วิธีแก้ไขปัญหาทั่วไปคือการจัดเก็บเซสชันในไฟล์ หรือใน NoSQL DB เช่น Redis
เกี่ยวกับความปลอดภัย เซสชันฝั่งเซิร์ฟเวอร์ปลอดภัยกว่าฝั่งไคลเอ็นต์ ลูกค้ามีความเสี่ยงที่จะถูกคุกคามมากขึ้นเนื่องจากผู้ใช้มักจะไม่ตระหนักถึงภัยคุกคามที่พวกเขาสัมผัส อย่างน้อยไม่ใช่ผู้ใช้ทั่วไป
ในทางกลับกันการโจมตีโครงสร้างพื้นฐานฝั่งเซิร์ฟเวอร์นั้นไม่ใช่เรื่องยาก
JWT: ทุกอย่างถูกเก็บไว้ในโทเค็น (ซึ่งอาจถูกเก็บไว้ในไฟล์ข้อความซึ่งเรียกอีกอย่างว่าคุกกี้)
ไม่ได้จริงๆ JWT จัดเก็บข้อมูลส่วนใหญ่เกี่ยวข้องกับการอนุญาตและผู้ออกโทเค็น
แม้ว่าพวกเขาจะใช้เพื่อบรรจุ ID ผู้ใช้ (ย่อย) แต่เราพบ JWT ที่ไม่ได้ระบุผู้ใช้ที่ผ่านการตรวจสอบสิทธิ์แล้ว ตัวอย่างเช่นโทเค็นสำหรับเซสชันแขก เนื้อหาหลักของ JWTs มีการเรียกร้อง ; รายการที่จะตรวจสอบโดยกระบวนการอนุมัติ
เป็นสิ่งสำคัญที่จะเก็บไว้ในใจว่าJWTs ไม่ได้เก็บรักษาโลก เซสชั่นหรือสถานะโปรแกรมยังจะต้องมีการเก็บไว้ที่อื่นและจัดการอย่างเป็นอิสระ
เกี่ยวกับ JWTs สิ่งเหล่านี้มักจะถูกจัดเก็บเป็นคุกกี้แม้ว่าพวกเขาจะสามารถเก็บไว้ในการจัดเก็บในท้องถิ่น นอกจากนี้ชุมชน OWASP ยังพิจารณาsessionStorageว่าปลอดภัยยิ่งขึ้นสำหรับเว็บเบราว์เซอร์ แต่มันขึ้นอยู่กับรุ่นของเบราว์เซอร์
1: เวิลด์ไวด์เว็บหมายถึงไร้สัญชาติ ถ้าเราต้องการสร้างแอพพลิเคชั่นฝั่งเซิร์ฟเวอร์ที่ไร้รัฐควรจัดเก็บเซสชั่นไว้ที่อื่นในฝั่งไคลเอ็นต์
2: เปิดโปรแกรมประยุกต์ด้านเซิร์ฟเวอร์เป็นstatefulแอพลิเคชัน
3: ไคลเอ็นต์เป็นแอปพลิเคชันไม่ใช่ในฐานะผู้ใช้
user_id
ผู้ใช้ที่ลงชื่อเข้าใช้