ตัวเลือก "ความลับ" ของเซสชันคืออะไร


111

ฉันไม่รู้อะไรเลยเกี่ยวกับการเข้ารหัส ฉันสงสัยว่าความลับของเซสชั่นคืออะไร

ฉันเห็นรหัสดังนี้:

app.use(express.session({
  store: mongoStore({
    url: app.set('db-uri')
  }),
  secret: 'topsecret'
}));

ความลับคืออะไรและฉันควรเปลี่ยน?

คำตอบ:


83

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


43
ไม่เพียง แต่คุณสามารถเปลี่ยนได้ แต่คุณควรเปลี่ยนด้วย
Michael Mior

1
@MichaelMior บ่อยแค่ไหน?
FRD

9
จุด @FRD topsecretฉันคือการที่คุณไม่ควรให้เริ่มต้นของสิ่งที่ต้องการ ความลับควรเป็นสตริงอักขระแบบสุ่ม ตามหลักการแล้วคุณควรเปลี่ยนเป็นระยะในกรณีที่มีการค้นพบ อย่างไรก็ตามสิ่งนี้ต้องการการสนับสนุนสำหรับการหมุนเวียนข้อมูลลับดังนั้นคุณจึงไม่ทำให้เซสชันที่มีอยู่เป็นโมฆะในทันที นั่นคือความลับสองเซสชันควรได้รับการพิจารณาว่าใช้ได้พร้อมกัน จากความรู้ของฉัน Express ไม่รองรับการหมุนความลับในขณะนี้
Michael Mior

7
@MichaelMior express-session ตั้งแต่ 1.11.0 รองรับการหมุนลับ จากเอกสาร: "หากมีการระบุอาร์เรย์ของความลับจะใช้เฉพาะองค์ประกอบแรกในการลงนามคุกกี้รหัสเซสชันในขณะที่องค์ประกอบทั้งหมดจะได้รับการพิจารณาเมื่อยืนยันลายเซ็นในคำขอ" (ดูexpressjs / session # 127สำหรับรายละเอียด)
Wolfgang

นี่คือสิ่งเดียวกับคุกกี้ที่ลงนามหรือไม่ถ้าใช่ .. คุณต้องทำสิ่งนี้:res.cookie('name', 'value', {signed: true})
มูฮัมหมัดอุเมอร์

22

ความลับนี้ใช้เพื่อแฮชเซสชันกับ HMAC:

https://github.com/senchalabs/connect/blob/master/lib/middleware/session.js#L256

จากนั้นเซสชันจะได้รับการป้องกันจากการลักลอบเซสชันโดยการตรวจสอบลายนิ้วมือกับแฮชด้วยความลับ:

https://github.com/senchalabs/connect/blob/master/lib/middleware/session.js#L281-L287


3
แม้ว่าแฮชจะป้องกันการไฮแจ็คเซสชันได้อย่างไร หากผู้โจมตีมีคุกกี้เซสชันแสดงว่าพวกเขาไม่มีแฮชด้วยหรือไม่? หากผู้โจมตีไม่มีคุกกี้แล้วแฮชลับจะทำให้คาดเดาได้ยากขึ้นอย่างไร (เทียบกับการมีรหัสเซสชันแบบสุ่มอีกต่อไป)
Stuart P. Bentley

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

7
ลิงก์ทั้งสองไม่ถูกต้องเนื่องจากเป็นคำตอบ 3 ปี
trysis

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

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

-9

คีย์ลับโดยทั่วไปใช้สำหรับเข้ารหัสข้อมูลในเซสชัน


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