connect / expressjs에서 "서명 된"쿠키는 무엇입니까?


114

"서명 된 쿠키"가 실제로 무엇인지 알아 내려고합니다. 인터넷에별로 없는데, 내가 이것을 시도하면 :

app.use(express.cookieParser('A secret'));

하지만 여전히 ... 쿠키는 브라우저에서 여전히 100 % 정상이며 여기에 "서명"이 무엇인지 잘 모르겠습니다 (나는 클라이언트에서 이상한 점을 "보길"바랬습니다. 소금으로 "비밀"?)

설명서에는 ( https://github.com/expressjs/cookie-parser ) :

쿠키 헤더를 구문 분석 req.cookies 하고 쿠키 이름으로 키가 지정된 객체로 채 웁니다 . 선택적 으로 다른 미들웨어에서 사용할 수 있도록 secret할당 하는 문자열 을 전달하여 서명 된 쿠키 지원을 활성화 req.secret할 수 있습니다.

아는 사람 있나요?

Merc.

답변:


135

쿠키는 계속 표시되지만 서명이 있으므로 클라이언트가 쿠키를 수정했는지 감지 할 수 있습니다.

값 (현재 쿠키)의 HMAC를 만들고 base64로 인코딩하여 작동합니다. 쿠키를 읽으면 서명을 다시 계산하고 첨부 된 서명과 일치하는지 확인합니다.

일치하지 않으면 오류가 발생합니다.

쿠키의 내용도 숨기려면 대신 암호화해야합니다 (또는 서버 측 세션에 저장). 이미 거기에 미들웨어가 있는지 확실하지 않습니다.

편집하다

그리고 서명 된 쿠키를 만들려면

res.cookie('name', 'value', {signed: true})

서명 된 쿠키에 액세스하려면 다음 signedCookies개체를 사용하십시오 req.

req.signedCookies['name']

감사! 하지만 ... 현재 쿠키에 추가 된 서명이 보이지 않습니다. 즉, 클라이언트에서 쿠키는 서명없이 존재합니다. 비밀 메시지를 포함하는 것 외에 쿠키 서명을 활성화하기 위해해야 ​​할 일이 express.cookieParser()있습니까?
Merc

잠깐만 요 ... 쿠키를 설정하고 res.cookie('somethingElseAgainAndAgain', 'signed? Maybe' );있지만 ... 서명 한 것 같지 않습니다! cookieParser () 미들웨어는 서명 된 쿠키를 구문 분석 할 준비가되어 있지만 확실히 설정을 제대로 수행하고 있지 않습니다. 수동으로 서명해야합니까 ...?
Merc 2018-08-10

6
그것은 : (res.cookie(name, value, { signed: true })). 문서에서 누락 된 "세부 사항"보고 ...
Merc

6
세션 하이재킹은 다른 것입니다. 즉, 사용자 B는 사용자 A의 신원을 취합니다. 서명 된 쿠키는 사용자가 쿠키의 내용을 변경하지 않았는지 확인하는 방법 일 뿐이므로 내용을 신뢰할 수 있습니다.
staackuser2 2013-07-06

9
If it does not match, then it will give an error.Not an error를 언급 할 가치 있습니다. 해당 키에 대한 request.signedCookie 만 설정되지 않았습니다 . 그래서 더 같은 무시
basarat

25

emostar는 단순히 가치가 변조되지 않았 음을 확인하는 것이라고 언급했습니다. 두 개체를 구별하기 위해 다른 개체 (req.signedCookies)에 배치되어 개발자가 의도를 보여줄 수 있습니다. 다른 사람들과 함께 req.cookies에 저장 되었다면 누군가는 단순히 같은 이름의 서명되지 않은 쿠키를 만들어서 그 목적을 모두 무너 뜨릴 수 있습니다.


11

나는 이것에 대한 좋은 대답을 꽤 광범위하게 찾고 있었다. 그리고 서명 된 쿠키에 서명하는 cookie-signature데 사용되는 의 소스 코드를 cookie-parser보면 서명 된 쿠키가 무엇인지 더 잘 이해할 수 있었다.

val물론 쿠키의 값이며 secret옵션으로 추가하는 문자열입니다. cookie-parser

https://github.com/visionmedia/node-cookie-signature/blob/master/index.js#L16


3
다음은 보존 된 표준 링크입니다. github.com/tj/node-cookie-signature/blob/…

코드를 읽는 것이 실제로 훨씬 더 나은 설명이었습니다. 감사!

0

나는 쿠키 파서 1.4.4 버전을 사용했습니다.

서명 된 쿠키와 브라우저에서 암호화 된 서명 된 쿠키를 추가 할 수 있습니다. editThisCookie (크롬 플러그인)를 사용하여 서명 된 쿠키를 편집하려고하면 cookie-parser가 외부 변경을 감지 한 다음 false를 값으로 설정합니다.

response.cookie('userId',401,{signed: true})

브라우저의 응답 헤더는 다음과 같이 나타납니다.

Set-Cookie: empId=s%3A101.US2oSV4TSvfkvvEQ5fj1sXsjj8rNxx2ph4VdHNTuKX8; Path=/

서명 된 쿠키 받기

request.signedCookies

https://gist.github.com/dineshbalaji/607d166f0240f932a5cb02099b0ece4c

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.