2012-08-10 3 views
73

"서명 된 쿠키"가 실제로 무엇인지 파악하려고합니다. 그물에 많이 없다, 내가하려고하면이 :connect/expressjs에서 "서명 된"쿠키는 무엇입니까?

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

하지만 여전히 ... 쿠키는 여전히 브라우저에 100 % 정상이고, 정말 "서명"모르는입니다 여기에 (? 내가 종류의 클라이언트에 대한 몇 가지 불확실성 "을 참조하십시오"기대하고 있었는데, 소금 등의 "비밀"을 사용하여 암호화 된 데이터와 같은 일이)

문서는 (https://github.com/expressjs/cookie-parser)를 말한다 :

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

아무도 알고 계십니까?

머크.

답변

79

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

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

일치하지 않는 경우 오류가 발생합니다.

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

편집

그리고 당신은

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

사용합니다 그리고 서명 쿠키 reqsignedCookies 객체 사용에 액세스하기 위해 서명 쿠키 만드는 : emostar 같은

req.signedCookies['name'] 
+0

덕분에 옵션으로 추가 할 문자열입니다! 하지만 ... 나는 현재 쿠키에 추가 된 서명을 보지 않을 것입니다. 즉, 클라이언트에서 쿠키는 서명없이 있습니다. 'express.cookieParser()'에 비밀 메시지를 포함하는 것 이외에 쿠키 서명을 사용하기 위해해야 ​​할 일이 있습니까? – Merc

+0

잠시만 기다려주세요 ... 쿠키를'res.cookie ('somethingElseAgainAndAgain', 'signed? Maybe')로 설정하고 있습니다.하지만 ... 그게 서명하는 것은 의심 스럽네요! cookieParser() 미들웨어는 서명 된 쿠키를 파싱 할 준비가되어 있지만 설정을 제대로하고 있지 않습니다 ... 수동으로 서명해야합니까? – Merc

+0

그게 전부일까요? 비밀을 추가하기 전의 쿠키일까요? 쿠키를 제거하여 쿠키가 쿠키에 들어 갔는지 확인하십시오. – staackuser2

16

그래를 단순히 값이 변경되지 않았 음을 보장하는 것입니다. 다른 객체 (req.signedCookies)에 배치되어 두 객체를 구별하고 개발자가 의도를 표시 할 수있게합니다. 다른 사람들과 함께 req.cookies에 저장 되었다면, 누군가는 같은 이름의 서명되지 않은 쿠키를 단순히 만들 수 있습니다. 즉이 서명 쿠키에 서명 cookie-parser에 의해 사용되는

8

나는이 ... 에 좋은 답변을 꽤 광범위한 검색 및 cookie-signature의 소스 코드를 찾고있다가 나에게 무엇을 서명 쿠키의 더 나은 이해를 준 입니다.

val

은 물론 쿠키의 값이고, secretcookie-parser

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

+2

다음은 보존 된 표준 링크입니다. https://github.com/tj/node-cookie-signature/blob/60f3be29232145e445aada51d520d370b0a52161/index.js#L16 –

+0

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