세션의 "비밀"옵션은 무엇입니까?


111

나는 암호화에 대해 아무것도 모른다. 세션 비밀이 무엇인지 궁금합니다.

다음과 같은 코드가 표시됩니다.

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

비밀은 무엇이며 변경해야합니까?

답변:


83

예, 변경해야합니다. connect의 세션 비밀은 단순히 해시 를 계산하는 데 사용됩니다 . 문자열이 없으면 세션에 대한 액세스는 본질적으로 "거부"됩니다. 약간 도움이 될 연결 문서를 살펴보십시오 .


43
변경할 수있을뿐만 아니라 변경해야합니다.
— Michael Mior 2012 년

1
@MichaelMior, 얼마나 자주?
— FRD

9
@FRD 내 요점은 같은 기본값을 유지해서는 안된다는 것 topsecret입니다. 비밀은 임의의 문자열이어야합니다. 이상적으로는 발견 된 경우 주기적으로 변경하는 것이 좋습니다. 그러나이를 위해서는 비밀 순환에 대한 지원이 필요하므로 기존 세션을 즉시 무효화하지 않습니다. 즉, 두 개의 세션 비밀이 동시에 유효한 것으로 간주되어야합니다. 내가 아는 한, Express는 현재 회전하는 비밀을 지원하지 않습니다.
— Michael Mior 2014

7
1.11.0 이후 @MichaelMior 익스프레스 세션은 비밀 순환을 지원합니다. 문서에서 : "비밀 배열이 제공되면 첫 번째 요소 만 세션 ID 쿠키에 서명하는 데 사용되며 모든 요소는 요청에서 서명을 확인할 때 고려됩니다." (참조 expressjs / 세션 # 127 자세한 내용입니다.)
— 볼프강

예를 .. 할 경우이 작업을 수행 할 필요가 서명 쿠키로이 같은 일이다 :res.cookie('name', 'value', {signed: true})
— 무하마드 Umer

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. 사용자가 할 수없는 비밀 (소금)이 없기 때문에 사용자를 가장하여 세션을 스푸핑합니다. 적절한 세션 ID를 생성하십시오.
— mattdlockyer

7
이 두 링크는 ​​3 년 된 답변이기 때문에 유효하지 않습니다.
— trysis

5
@mattdlockyer 이것은 세션 하이재킹으로부터 사용자를 보호하지 않습니다. 그리고 침입자는 왜 쿠키를 해독하려고합니까? 공격자가 쿠키를 가지고 있다면 세션이 끝날 때까지 이미 모든 권한을 가지고 있습니다. 사람들이 쿠키에 사용자의 암호를 저장하는 것과는 다릅니다. 그리고 jwt와 같은 것은 거의 항상 피해야합니다.
— Forivin

세션의 비밀 목적에 대해 엇갈린 답변이있는 것 같습니다. 일부는 세션 하이재킹으로부터 보호한다고 말하는 반면 다른 사람들은 동의하지 않습니다. 누군가이 해시를 생성하는 실제 목적이 무엇인지 설명 할 수 있습니까? 정확하게 해시를 계산하는 것은 무엇입니까?
— nawK

-9

기본적으로 세션의 데이터를 암호화하는 데 사용되는 비밀 키


8
아니, 그렇지 않습니다. 6 년 전 승인 된 답변을 참조하세요.
— Quentin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.