2012-06-27 3 views
3

저는 play framework2를 사용하여 매우 안전한 로그인 메커니즘을 설계하고 있습니다. Play는 세션의 개념이 없기 때문에 내가 생각해야 할 보안 조치가 무엇인지 궁금해했습니다. 우리는 분명히 SSL을 사용하여 로그인 자격 증명을 전달할 것이고 쿠키는 전자 메일이나 사용자 ID와 같은 일부 사용자 정보의 암호화 된 값이 될 것입니다. 다른 사람의 쿠키에서 쿠키를 스니핑하거나이를 보유하고 재사용 할 수 있습니까? 어떻게하면 더 안전하게 만들 수 있습니까?쿠키와 자바로 매우 안전한 로그인을 만드십시오

답변

2

실제로 쿠키는 암호화되지 않습니다. 그것은 서명되었습니다. 이 서명은 application.conf의 application.secret에서 가져옵니다. 의

:

그것은 사람이 플레이 문서에서

(... 결국 다른 세션을 스푸핑하거나 로그인/아이디/토큰 변경하려고) 쿠키의 내용을 볼 수 있다는 것을 의미한다 물론 쿠키 값은 비밀 키로 서명되므로 클라이언트가 쿠키 데이터를 수정할 수 없거나 무효화됩니다.

나는 보안 전문가가 아니지만, 응용 프로그램을 비밀리에 유지하면 충분히 꿰맬 수 있습니다.

서명의 강도에 대한 토론은 환영합니다!

+0

답장을 보내 주셔서 감사합니다. 그래서 쿠키 값이 서명되어 있고 수정할 수 없다는 것을 이해합니다. 그러나 쿠키를 스푸핑하거나 액세스하여 가짜로 로그인하여 재사용 할 수 있습니까? – nightograph

+2

'session.httpOnly' 설정을 변경하지 않는 한 JavaScript로 액세스 할 수 없습니다. application.conf에'session.secure = true'를 설정하여 세션 쿠키에 대한 SSL 액세스를 강제 할 수 있습니다. 'session.maxAge = ... '를 사용하여 쿠키 최대 나이도 같습니다. –

1

글쎄 정말 안전하고 싶다면, 로그인을 위해서뿐만 아니라 SSL을 통해 일반 통신을해야합니다. 그렇지 않으면 누군가가 쿠키를 얻을 수 있습니다. 당신이 쿠키 솔루션이나 더 나은 플레이 세션에서 가지고있는 주된 문제는 세션 타임 아웃이 없다는 것입니다. 그래서 나는 쿠키를 얻을 수 있었고, 나는이 사용자 계정을 영원히 사용할 수 있다고 상상해보십시오. 따라서 세션 타임 아웃과 같은 것이 필요합니다. 두 쿠키 모두 동일한 쿠키를 변경하려고하기 때문에 동일한 클라이언트의 요청이 하나 이상있는 경우이 작업은 매우 까다로워집니다. 해결 방법은 캐시를 통해 세션 시간 초과를 처리하는 것이지만 클러스터에서 실행하는 경우 분산 캐시 솔루션이 필요하다는 점을 염두에 두어야합니다.

내가 작성한 보안 솔루션 https://launchpad.net/permsec의 변경 사항을 따르십시오. 이것은 내가해야하는 열린 일이다.

+0

감사합니다 @niles, 캐시를 배포 할 필요가 있지만 전체 클러스터가 괜찮을합니다 같은 캐시에서 읽는 한 가정합니다. SSL로 전체 연결을 갖는 것이 좋은 생각이지만 브라우저 디렉토리에서 스니핑하지 않고 직접 쿠키를 얻을 수 있습니까? – nightograph

+0

글쎄, 쿠키를 강탈하는 많은 시나리오가 존재하므로 항상 쿠키를 도둑 맞을 수 있다고 가정합니다. – niels

1

통신을 도청하여 쿠키를 훔칠 위험이있는 경우 공격자가 더 어렵게 만들 수 있습니다. 예를 들어, 서명 된 쿠키에 컴퓨터의 IP 주소를 추가하십시오. 다른 사람이 훔치면 희생자와 동일한 IP 주소를 사용해야합니다. 불가능하지는 않지만 바를 일으킨다.