2013-02-12 1 views
4

연결 Node.js 프레임 워크에서 connect.sid 쿠키가 작동하는 방식에 대한 설명이 필요합니다. 나는 그들이, 같은 형식의 것으로 나타났습니다Connect의 세션 미들웨어의 서명 된 쿠키는 어떻게 작동합니까?

s:hash.signature 

내가 해시 메모리 저장소 나 레디 스 저장소에서 세션 데이터에 액세스하는 데 사용 될 수있는보다 많은 경우 서명을 사용하는 방법을 이해하지 않습니다.

또한 s:이 쿠키에있는 이유도 알 수 없습니다. 그것은 무엇을 목적으로합니다.

서명이 해시에 "서명"하는 데 사용된다는 사실을 알고 있습니다. "부호"또는 "부호"가 정확히 무엇을 의미합니까? 이 과정에 대한 설명이 필요합니다.

감사합니다.

답변

3

서버가 쿠키를 생성했는지 확인할 수 있도록 서명이 있습니다. 일부 공격자가 아닌 쿠키가 생성되었는지 확인할 수 있습니다.

서명에 사용 된 비밀을 아는 사람 만 동일한 값으로 서명 할 수 있습니다.

"s :"서명 된 쿠키 인 것을 쉽게 알 수 있습니다. 서명되지 않은 다른 형식과 달리 서명 된 쿠키입니다.

서명 된 쿠키에서 데이터를 검색하는 방법이며 서명이 잘못되었습니다. 실제 앱에서 추출 된 부분 코드 만 있지만 아이디어를 얻어야합니다.

var cookie = require('cookie'); 
var connect = require('connect'); 
var secret = "same secret used to sign cookies"; 

socketio.set('authorization', function(data, cb) { 
    if (data.headers.cookie) { 
    var sessionCookie = cookie.parse(data.headers.cookie); 
    var sessionID = connect.utils.parseSignedCookie(sessionCookie['connect.sid'], secret); 
    // do something here with decoded value 
    } 
}); 

헤더에 액세스 할 수 있도록 socket.io의 "authorization"기능을 사용해야합니다. 이 코드는 xhr-polling 전송을 사용할 때 작동합니다. 예를 들어 websocket에서 작동하는지 확신 할 수 없습니다.

+0

이렇게 socket.io 또는 SockJS에서 수동으로 어떻게 사용합니까? – Sam

+1

모든 시드는 자체 서명 된 서명을 가져야합니다. 그렇지 않으면 목적을 달성하지 못합니다. 하지만 미들웨어는 서명이 유효하다는 것을 어떻게 알 수 있습니까? 세션에 저장합니까? 또한, 왜 서명 대신 정말로 긴 sid를 만들지 않는 것이 좋을까요? – Sam

+0

위의 코드에있는 비밀은 express.session()에 전달되어 쿠키에 서명 한 것입니다. 서명은 내용과 해시의 해시입니다. –

관련 문제