การรับรองความถูกต้องตามคุกกี้ทำงานอย่างไร


210

ใครสามารถให้คำอธิบายทีละขั้นตอนเกี่ยวกับวิธีการตรวจสอบความถูกต้องตามคุกกี้ได้ ฉันไม่เคยทำอะไรเกี่ยวกับการรับรองความถูกต้องหรือคุกกี้ เบราว์เซอร์ต้องทำอะไร เซิร์ฟเวอร์ต้องการทำอะไร ในลำดับใด เราจะรักษาสิ่งต่าง ๆ ให้ปลอดภัยได้อย่างไร

ฉันได้อ่านเกี่ยวกับการรับรองความถูกต้องหลายประเภทและเกี่ยวกับคุกกี้แล้ว แต่ฉันต้องการคำอธิบายพื้นฐานเกี่ยวกับวิธีการใช้สองวิธีด้วยกัน - ฉันแค่อ่านว่าพวกเขามักจะใช้ร่วมกัน แต่ไม่สามารถหาคำอธิบายได้อย่างไร


คำตอบ:


162

คุกกี้นั้นเป็นเพียงรายการในพจนานุกรม แต่ละรายการมีคีย์และค่า สำหรับการตรวจสอบสิทธิ์คีย์อาจเป็นชื่อ 'ชื่อผู้ใช้' และค่าจะเป็นชื่อผู้ใช้ ทุกครั้งที่คุณส่งคำขอไปยังเว็บไซต์เบราว์เซอร์ของคุณจะรวมคุกกี้ไว้ในคำขอและเซิร์ฟเวอร์โฮสต์จะตรวจสอบคุกกี้ ดังนั้นการตรวจสอบสิทธิ์สามารถทำได้โดยอัตโนมัติเช่นนั้น

ในการตั้งค่าคุกกี้คุณเพียงแค่เพิ่มคุกกี้ลงในการตอบกลับที่เซิร์ฟเวอร์ส่งกลับหลังจากที่ร้องขอ เบราว์เซอร์จะเพิ่มคุกกี้เมื่อได้รับการตอบกลับ

มีตัวเลือกต่าง ๆ ที่คุณสามารถกำหนดค่าสำหรับฝั่งเซิร์ฟเวอร์คุกกี้เช่นเวลาหมดอายุหรือการเข้ารหัส คุกกี้ที่เข้ารหัสมักถูกอ้างถึงว่าเป็นคุกกี้ที่ลงนามแล้ว โดยทั่วไปเซิร์ฟเวอร์เข้ารหัสคีย์และค่าในรายการพจนานุกรมดังนั้นเฉพาะเซิร์ฟเวอร์เท่านั้นที่สามารถใช้ประโยชน์จากข้อมูลได้ ดังนั้นคุกกี้จะปลอดภัย

เบราว์เซอร์จะบันทึกคุกกี้ที่เซิร์ฟเวอร์กำหนด ในส่วนหัว HTTP ของทุกคำขอที่เบราว์เซอร์ทำกับเซิร์ฟเวอร์นั้นจะเพิ่มคุกกี้ มันจะเพิ่มเฉพาะคุกกี้สำหรับโดเมนที่ตั้งค่าไว้ Example.com สามารถตั้งค่าคุกกี้และเพิ่มตัวเลือกในส่วนหัว HTTP สำหรับเบราว์เซอร์เพื่อส่งคุกกี้กลับไปที่โดเมนย่อยเช่น sub.example.com เบราว์เซอร์จะไม่สามารถส่งคุกกี้ไปยังโดเมนอื่นได้


สิ่งที่ฉันเข้าใจคือเบราว์เซอร์สามารถส่งคุกกี้กลับไปยังโดเมนเดียวกันได้ เบราว์เซอร์ใช้โดเมนย่อยในบัญชีเมื่อแยกความแตกต่างระหว่างสองโดเมนหรือไม่
Aakash

1
คุณสามารถตั้งค่าตัวเลือกในส่วนหัว HTTP สำหรับวิธีที่เบราว์เซอร์จัดการโดเมนย่อย
Conor Patrick

288

ฉันรู้ว่านี่เป็นเวลาหลายปีแล้ว แต่ฉันคิดว่าฉันสามารถขยายคำตอบของ Conor และเพิ่มการอภิปรายได้อีกเล็กน้อย

ใครสามารถให้คำอธิบายทีละขั้นตอนเกี่ยวกับวิธีการตรวจสอบความถูกต้องตามคุกกี้ได้ ฉันไม่เคยทำอะไรเกี่ยวกับการรับรองความถูกต้องหรือคุกกี้ เบราว์เซอร์ต้องทำอะไร เซิร์ฟเวอร์ต้องการทำอะไร ในลำดับใด เราจะรักษาสิ่งต่าง ๆ ให้ปลอดภัยได้อย่างไร

ขั้นตอนที่ 1: ลูกค้า> การสมัคร

ก่อนอื่นผู้ใช้จะต้องลงทะเบียน ลูกค้าโพสต์คำขอ HTTP ไปยังเซิร์ฟเวอร์ที่มีชื่อผู้ใช้และรหัสผ่านของตน

ขั้นตอนที่ 2: เซิร์ฟเวอร์> การจัดการการลงทะเบียน

เซิร์ฟเวอร์ได้รับคำขอนี้และซ่อนรหัสผ่านก่อนที่จะจัดเก็บชื่อผู้ใช้และรหัสผ่านในฐานข้อมูลของคุณ วิธีนี้ถ้ามีคนเข้าถึงฐานข้อมูลของคุณพวกเขาจะไม่เห็นรหัสผ่านจริงของผู้ใช้

ขั้นตอนที่ 3: ไคลเอนต์> ล็อกอินผู้ใช้

ตอนนี้ผู้ใช้ของคุณเข้าสู่ระบบเขา / เธอให้ชื่อผู้ใช้ / รหัสผ่านของพวกเขาและอีกครั้งนี้จะถูกโพสต์เป็นคำขอ HTTP ไปยังเซิร์ฟเวอร์

ขั้นตอนที่ 4: เซิร์ฟเวอร์> ตรวจสอบการเข้าสู่ระบบ

เซิร์ฟเวอร์ค้นหาชื่อผู้ใช้ในฐานข้อมูลแฮชรหัสผ่านเข้าสู่ระบบที่ให้มาและเปรียบเทียบกับรหัสผ่านที่แฮชก่อนหน้านี้ในฐานข้อมูล ถ้ามันไม่ได้ตรวจสอบเราอาจปฏิเสธการเข้าถึงพวกเขาโดยการส่งรหัสสถานะ 401 และสิ้นสุดการร้องขอ

ขั้นตอนที่ 5: เซิร์ฟเวอร์> กำลังสร้างโทเค็นการเข้าถึง

หากทุกอย่างเช็คเอาท์เราจะสร้างโทเค็นการเข้าถึงซึ่งระบุเซสชันของผู้ใช้โดยไม่ซ้ำกัน ยังคงอยู่ในเซิร์ฟเวอร์เราทำสองสิ่งด้วยโทเค็นการเข้าถึง:

  1. เก็บไว้ในฐานข้อมูลที่เกี่ยวข้องกับผู้ใช้นั้น
  2. แนบไปกับคุกกี้การตอบกลับเพื่อส่งคืนไปยังไคลเอ็นต์ ตรวจสอบให้แน่ใจว่าได้ตั้งวันที่ / เวลาที่หมดอายุเพื่อ จำกัด เซสชันของผู้ใช้

ต่อจากนี้ไปคุกกี้จะถูกแนบไปกับทุกคำขอ (และการตอบสนอง) ที่ทำระหว่างไคลเอนต์และเซิร์ฟเวอร์

ขั้นตอนที่ 6: ไคลเอนต์> ส่งคำขอหน้า

กลับไปที่ฝั่งไคลเอ็นต์ตอนนี้เราเข้าสู่ระบบทุกครั้งที่ลูกค้าทำการร้องขอสำหรับหน้าเว็บที่ต้องการการอนุญาต (เช่นพวกเขาจำเป็นต้องเข้าสู่ระบบ) เซิร์ฟเวอร์ได้รับโทเค็นการเข้าถึงจากคุกกี้และตรวจสอบกับหนึ่ง ในฐานข้อมูลที่เกี่ยวข้องกับผู้ใช้นั้น หากตรวจสอบแล้วจะอนุญาตการเข้าถึง

คุณควรเริ่มต้นนี้ อย่าลืมล้างคุกกี้เมื่อออกจากระบบ!


10
ขอบคุณสำหรับคำอธิบาย ฉันแค่สงสัยว่าโทเค็นการเข้าถึงให้ความปลอดภัยได้อย่างไร ผู้โจมตีสามารถขโมยคุกกี้สร้างบัญชีผู้ใช้ที่ได้รับการรับรองความถูกต้องแล้วหรือไม่? หรือว่าได้รับการคุ้มครองโดย SSL?
Richeek

6
@Richeek SSL รักษาความปลอดภัยระหว่างการร้องขอ / ตอบกลับ แต่ผู้โจมตีอาจเข้าถึงคุกกี้ของคุณที่จุดสิ้นสุด (เช่นเบราว์เซอร์ของคุณ) ในทางทฤษฎีแล้วพวกเขาสามารถก่อให้เกิดเป็นผู้ใช้ในการเข้าสู่ระบบจนกว่าคุกกี้จะหมดอายุ ฉันพูดว่า "ตามหลักวิชา" เพราะการดำเนินการด้านบนไม่ได้จัดการเรื่องนั้น ในการใช้งานด้านบนผู้โจมตีจะสามารถเข้าถึงได้จนกว่าโทเค็นการเข้าถึงในฐานข้อมูลของคุณจะได้รับการอัพเดต (เช่นการเข้าสู่ระบบครั้งต่อไป)
pllx

14
คุณอาจทำให้โทเค็นการเข้าถึงใช้งานไม่ได้เมื่อหมดอายุตัวเองอาจมี“ วันหมดอายุ” ในฐานข้อมูลของคุณ หรือคุณอาจพิจารณาใช้JSON Web Tokens (JWT)ซึ่งเหมือนกับโทเค็นการเข้าถึง แต่สามารถจัดการโทเค็นหมดอายุในสิ่งอื่น ๆ เพิ่มเติมเกี่ยวกับ JWT ที่นี่ ผู้โจมตีจะยังคงเข้าถึงบัญชีของคุณเป็นระยะเวลาสั้น ๆ หากพวกเขามีโทเค็นการเข้าถึง / JWT ของคุณดังนั้นคุณควรรักษาความปลอดภัยจุดปลายของคุณ
pllx

3
ใช้เวลานานมากในการพูดขอบคุณ! ขอบคุณสำหรับคำอธิบายของคุณ
Richeek

4
@ManuChadha คุณสามารถใช้โทเค็น / คีย์เซสชันยังบันทึกที่อยู่ IP ของผู้ใช้พร้อมกับพารามิเตอร์การระบุอื่น ๆ เช่น user-agent ฯลฯ หากการร้องขอนั้นมาพร้อมกับคุกกี้ที่ถูกต้อง แต่จาก ip ผิดเบราว์เซอร์ ฯลฯ ปฏิเสธคำขอและเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าเข้าสู่ระบบเพื่อตรวจสอบอีกครั้ง
FalcoGer

18

การรับรองความถูกต้องตามคุกกี้

การรับรองความถูกต้องตามคุกกี้ทำงานตามปกติใน 4 ขั้นตอนเหล่านี้ -

  1. ผู้ใช้ระบุชื่อผู้ใช้และรหัสผ่านในแบบฟอร์มการเข้าสู่ระบบและคลิกเข้าสู่ระบบ
  2. หลังจากทำการร้องขอเซิร์ฟเวอร์จะตรวจสอบความถูกต้องของผู้ใช้ในแบ็กเอนด์โดยการสอบถามในฐานข้อมูล หากคำขอนั้นถูกต้องมันจะสร้างเซสชันโดยใช้ข้อมูลผู้ใช้ที่ดึงมาจากฐานข้อมูลและเก็บไว้สำหรับแต่ละเซสชันจะมีการสร้างรหัสเฉพาะที่เรียกว่ารหัสเซสชันโดยแต่ละเซสชันจะมีการส่งรหัสผ่านให้กับลูกค้าผ่านเบราว์เซอร์
  3. เบราว์เซอร์จะส่งรหัสเซสชันนี้ในแต่ละคำขอในภายหลังรหัสเซสชันจะได้รับการตรวจสอบกับฐานข้อมูลตามเว็บไซต์รหัสเซสชันนี้จะระบุเซสชันที่เป็นของไคลเอนต์ใดแล้วให้เข้าถึงการร้องขอ

  4. เมื่อผู้ใช้ออกจากระบบแอปจะถูกทำลายทั้งฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.