Tùy chọn "bí mật" của phiên là gì?


111

Tôi không biết gì về mật mã. Tôi đang tự hỏi bí mật của phiên là gì.

Tôi thấy mã như thế này:

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

Bí quyết là gì và tôi có nên thay đổi nó không?

Câu trả lời:


83

Có, bạn nên thay đổi nó. Bí mật phiên trong kết nối chỉ được sử dụng để tính toán băm . Nếu không có chuỗi, quyền truy cập vào phiên về cơ bản sẽ bị "từ chối". Hãy xem các tài liệu kết nối , tài liệu đó sẽ hữu ích một chút.


43
Bạn không chỉ có thể thay đổi nó mà còn nên thay đổi nó.
Michael Mior

1
@MichaelMior, tần suất như thế nào?
FRD

9
@FRD Quan điểm của tôi là bạn không nên giữ mặc định của một cái gì đó như thế topsecret. Bí mật phải là một chuỗi ký tự ngẫu nhiên. Tốt nhất là bạn cũng nên thay đổi nó định kỳ trong trường hợp nó đã được phát hiện. Tuy nhiên, điều này yêu cầu hỗ trợ xoay vòng bí mật để bạn không làm mất hiệu lực ngay lập tức các phiên hiện có. Có nghĩa là, hai bí mật phiên nên được coi là hợp lệ đồng thời. Theo hiểu biết của tôi, Express không có hỗ trợ cho các bí mật luân phiên vào lúc này.
Michael Mior

7
@MichaelMior express-session kể từ 1.11.0 hỗ trợ xoay vòng bí mật. Từ tài liệu: "Nếu một mảng bí mật được cung cấp, chỉ phần tử đầu tiên sẽ được sử dụng để ký cookie của session ID, trong khi tất cả các phần tử sẽ được xem xét khi xác minh chữ ký trong các yêu cầu." (Xem expressjs / session # 127 để biết thêm chi tiết.)
Wolfgang

Điều này có giống với cookie đã ký không, nếu có .. bạn có cần phải làm điều này không:res.cookie('name', 'value', {signed: true})
Muhammad Umer

22

Bí mật được sử dụng để băm phiên với HMAC:

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

Sau đó, phiên được bảo vệ chống lại việc chiếm quyền điều khiển phiên bằng cách kiểm tra dấu vân tay chống lại hàm băm với bí mật:

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


3
Tuy nhiên, hàm băm bảo vệ chống lại việc chiếm quyền điều khiển phiên như thế nào? Nếu kẻ tấn công có cookie phiên, thì chúng cũng không có hàm băm? Nếu kẻ tấn công không có cookie, thì làm thế nào để băm bí mật khiến nó khó đoán hơn (so với chỉ có ID phiên ngẫu nhiên dài hơn)?
Stuart P. Bentley

8
bí mật là muối cho băm, điều này chỉ khiến ai đó khó: 1. giải mã cookie lừa đảo, 2. giả mạo phiên bằng cách mạo danh người dùng, vì họ không có bí mật (muối) nên họ không thể tạo id phiên thích hợp.
mattdlockyer,

7
Cả hai liên kết đó đều không hợp lệ do đây là câu trả lời cho đứa trẻ 3 tuổi.
chạy thận

5
@mattdlockyer Điều này không bảo vệ bạn khỏi bị chiếm quyền điều khiển phiên. Và tại sao kẻ tấn công lại cố gắng giải mã một cookie? Nếu kẻ tấn công có cookie thì anh ta / cô ta đã có toàn quyền truy cập cho đến khi phiên kết thúc. Ý tôi là nó không giống như mọi người lưu mật khẩu của người dùng của họ trong cookie, điều đó sẽ thật nực cười. Và những thứ như jwt hầu như luôn luôn nên tránh.
Forivin 19/09/17

Dường như có nhiều câu trả lời trái chiều liên quan đến mục đích bí mật của một phiên họp. Một số người nói rằng nó bảo vệ khỏi bị cướp phiên trong khi những người khác không đồng ý. Ai đó có thể giải thích mục đích thực sự của việc tạo ra hàm băm này là gì không? Chính xác, nó đang tính toán một hàm băm để làm gì?
nawK

-9

khóa bí mật về cơ bản được sử dụng để mã hóa dữ liệu trong phiên


8
Không, không phải vậy. Hãy xem câu trả lời được chấp nhận từ 6 năm trước.
Quentin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.