วิธีใช้งานการลงชื่อเข้าใช้อัตโนมัติอย่างปลอดภัย


15

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

ซอฟต์แวร์หลายชิ้นมีคุณสมบัตินี้ตั้งแต่เบราว์เซอร์ไปจนถึงโปรแกรมอย่าง Dropbox

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

ฉันไม่แน่ใจด้วยซ้ำว่าจะหลีกเลี่ยงการเก็บบางสิ่งเช่นคุกกี้ในข้อความล้วน หากคุณเข้ารหัสคุณจะเก็บกุญแจไว้เพื่อถอดรหัสที่ไหน

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

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


2
มันเกี่ยวกับสิ่งที่คุณไว้วางใจ หากคุณไม่เชื่อถือเครื่องจะเก็บ ID ไว้นั่นเป็นปัญหาของคุณ หากคุณเชื่อถือพวงกุญแจนั่นคือความปลอดภัยสูงสุดที่คุณจะได้รับ นอกหลักสูตรคุณสามารถเพิ่มความปลอดภัยที่กำหนดเองเช่นการตรวจจับฮาร์ดแวร์ของอุปกรณ์หรือบางอย่าง แต่ทั้งหมดนี้เป็นของปลอมที่ไม่สามารถรู้ได้ในท้ายที่สุด มันอยู่นอกเหนือการควบคุมของคุณ แน่นอนว่าสิ่งที่โง่เช่นการบันทึกรหัสผ่านแบบข้อความยกเว้น
Luc Franken

@LucFranken คุณจะเชื่อถือเครื่องได้อย่างไร? บางคนสามารถเอาเปรียบคุณเหมือนที่พวกเขาทำดรอปบ็อกซ์ นอกจากนี้ฉันจะเชื่อถือพวงกุญแจ แต่ไม่มีคอมพิวเตอร์ทุกเครื่องที่มีหนึ่งและ Windows ไม่เคยทำ (AFAIK) และถ้าคุณเก็บรหัสผ่านคุณจะหลีกเลี่ยงการเก็บรหัสผ่านเป็นข้อความที่ชัดเจนได้อย่างไร หากคุณเข้ารหัสพวกเขาคุณจะเก็บกุญแจไว้ที่ไหนเพื่อถอดรหัส?
Jay Simon

นั่นเป็นปัญหาอย่างแน่นอนคุณไม่สามารถเชื่อถือได้ ผู้ใช้สามารถกำหนดให้เชื่อถือได้เท่านั้น ที่คำนึงถึงผู้ใช้เข้าใจถึงความปลอดภัยของเครื่อง เขียนไวรัสการรับข้อมูลจาก Dropboxes เป็นไปได้ เช่นเดียวกับคีย์ที่จัดเก็บไว้ในเครื่องและข้อมูลท้องถิ่นอื่น ๆ คุณสามารถช่วยทำให้มันปลอดภัยยิ่งขึ้น (ลองนึกถึงแอพที่ต้องใช้รหัส 5 ตัว) แต่ในที่สุดมันก็อยู่ในพื้นที่และไม่สามารถควบคุมได้
Luc Franken

@LucFranken เป็นเพียงฉันหรือว่า autologin ดูเหมือนจะเป็นคุณลักษณะที่แพร่หลายหรือไม่? ถ้าเป็นเช่นนั้นทำไมผู้คนถึงไม่ได้เขียนเกี่ยวกับวิธีที่ถูกต้อง?
Jay Simon

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

คำตอบ:


12

วิธีหนึ่งคือ:

  • เมื่อผู้ใช้ล็อกอินให้เก็บID เซสชันไว้ในคุกกี้บนคอมพิวเตอร์ของลูกค้า (ไม่ใช่ชื่อผู้ใช้หรือรหัสผ่าน)
  • ผูกเซสชันกับที่อยู่ IP ดังนั้นแต่ละเซสชัน ID จะทำงานกับคอมพิวเตอร์ที่เริ่มทำงานเท่านั้น

ขึ้นอยู่กับว่าคุณใช้เฟรมเวิร์กใดในการพัฒนาเว็บไซต์ของคุณลักษณะการทำงานนี้อาจมีอยู่ในคุณสมบัติที่มีอยู่แล้ว

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

อัปเดต:นอกจากนี้ให้ใช้ HTTPS เพื่อเพิ่มความปลอดภัยอย่างเห็นได้ชัด

อัปเดต 2:โปรดทราบว่าวิธีการนี้มีข้อ จำกัด เนื่องจากวิธีนี้ใช้ไม่ได้ผลกับผู้ใช้ที่เปลี่ยนที่อยู่ IP เป็นจำนวนมาก อย่างไรก็ตามมันมีระดับความปลอดภัยที่เพิ่มขึ้นและอาจมีประโยชน์ในบางสถานการณ์


1
การคาดคะเนไปยังที่อยู่ IP นั้นไม่ได้ช่วยอะไรมากนักเพราะบางคนอาจมีคอมพิวเตอร์ที่อยู่หลังไฟร์วอลล์เดียวกันกับคุณ
Jay Simon

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

3
คุณคิดว่าวิธีการดังกล่าวจะสร้างความรำคาญให้กับผู้ใช้บนโทรศัพท์มือถือที่มีที่อยู่ IP อาจเปลี่ยนแปลงบ่อยหรือไม่?
Jay Simon

@ JaySimon ถ้ามันเกิดขึ้นในเซสชั่นผู้ใช้จะได้สัมผัสกับมันเป็นออกจากระบบทันทีซึ่งแน่นอนจะน่ารำคาญ ฉันไม่ทราบว่าพวกเขาเปลี่ยนแปลงบ่อยแค่ไหน (การค้นหาโดย Google อย่างรวดเร็วไม่เปิดเผยคำตอบที่ชัดเจน) ฉันจะไม่กังวลเกินไปเกี่ยวกับมันเว้นแต่ว่า IP มีแนวโน้มที่จะเปลี่ยนแปลงในขณะที่พวกเขากำลังใช้งานอยู่

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

5

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

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

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

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


2

จริงๆแล้วมันไม่ได้ยากขนาดนั้น ขั้นแรกให้จัดเก็บคุกกี้ด้วยรูปแบบนี้:

userID.token

คุณสามารถใช้แฮช sha1 สำหรับโทเค็นได้ จากนั้นใน Remember_me_tokens ที่เก็บตารางฐานข้อมูลของคุณ userID แฮช bcrypt ของโทเค็นและเวลาที่โทเค็นถูกสร้างขึ้น

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

หากพวกเขาออกจากระบบให้ลบคุกกี้

รันงาน cron เพื่อตัดการจำ Remember_me_tokens ที่เก่ากว่าพูด 7 วัน


อะไรจะป้องกันไม่ให้คนอื่นคัดลอกคีย์นี้และวางบนเครื่องและเข้าถึงบัญชีโดยไม่มีชื่อผู้ใช้หรือรหัสผ่าน
Jay Simon

คุณจะได้รับกุญแจได้อย่างไร มันเก็บไว้ในคอมพิวเตอร์ของใครบางคน
Ryan

คุณเดินขึ้นไปยังเครื่องคอมพิวเตอร์และเปิดไฟล์ที่มันเก็บไว้ :)
เจย์ไซมอน

2
@JaySimon อาร์กิวเมนต์เดียวกันนี้สามารถเกิดขึ้นได้กับคนที่เข้าสู่ระบบและเดินออกไปเป็นเวลา 5 นาทีโดยไม่ต้องล็อกคอมพิวเตอร์ของพวกเขาหรือคลิกจดจำฉันและบางคนก็กระโดดรหัสผ่านบัญชีของพวกเขา หากคุณสามารถยอมรับสถานการณ์ความปลอดภัยที่เป็นไปได้ความสะดวกสบายของมันก็ดี แต่นั่นเป็นเหตุผลว่าทำไมคุณไม่เห็นฟีเจอร์ Remember Me ในรายการ CIA NOC :) เซิร์ฟเวอร์ต้องให้โทเค็นบางอย่างที่ลูกค้าต้องเก็บ บนระบบไฟล์ มันไม่ได้อยู่ในมือของคุณจากมุมมองของเซิร์ฟเวอร์อีกต่อไป
maple_shaft

@maple_shaft ทำไมมีคนแปลกใจที่คุณสามารถทำเช่นนั้นเพื่อดรอปบ็อกซ์แล้ว? (ฉันเชื่อมโยงมันในคำถามของฉัน)
Jay Simon

0

คุณทำได้ก็ต่อเมื่อคุณเชื่อถืออุปกรณ์ที่คุณจัดเก็บ ขึ้นอยู่กับผู้ใช้ (หากคุณไม่สามารถควบคุมอุปกรณ์) ความปลอดภัย มันเป็นเพียงแค่ออกมาจากมือของคุณ

ตามที่ระบุไว้ในความคิดเห็น:

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

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