[security] HTTP 쿠키 포트가 구체적입니까?

하나의 컴퓨터에서 두 개의 HTTP 서비스가 실행 중입니다. 쿠키를 공유하는지 또는 브라우저가 두 서버 소켓을 구별하는지 여부를 알고 싶습니다.



답변

현재 쿠키 사양은 RFC 6265로 , RFC 2109RFC 2965 (RFC는 이제 “역사”로 표시됨) 를 대체 하고 실제 쿠키 사용 구문을 공식화합니다. 그것은 분명히 다음과 같이 말합니다 :

  1. 소개

역사적 이유로 쿠키에는 여러 가지 보안 및 개인 정보 보호 정책이 포함되어 있습니다. 예를 들어, 서버는 지정된 쿠키가 “보안”연결 용임을 나타내지 만 보안 속성은 활성 네트워크 공격자가있을 경우 무결성을 제공하지 않습니다. 마찬가지로, 웹 브라우저에서 사용하는 일반적인 “동일 출처 정책”이 다른 포트를 통해 검색된 컨텐츠를 분리하더라도 해당 호스트의 쿠키는 해당 호스트의 모든 포트에서 공유됩니다.

그리고 또한:

8.5. 약한 기밀 유지

쿠키는 포트 별 격리를 제공하지 않습니다 . 한 포트에서 실행되는 서비스가 쿠키를 읽을 수있는 경우 동일한 서버의 다른 포트에서 실행되는 서비스도 쿠키를 읽을 수 있습니다. 한 포트의 서비스에서 쿠키를 쓸 수있는 경우 동일한 서버의 다른 포트에서 실행되는 서비스가 쿠키를 쓸 수도 있습니다. 이러한 이유로 서버는 동일한 호스트의 다른 포트에서 상호 불신 서비스를 실행하고 쿠키를 사용하여 보안에 민감한 정보를 저장해서는 안됩니다.


답변

RFC2965 3.3.1 에 따르면 (브라우저가 뒤따를 수도 있고 없을 수도 있음), 헤더 의 port매개 변수를 통해 포트를 명시 적으로 지정하지 않으면 Set-Cookie쿠키가 포트로 전송되거나 전송되지 않을 수 있습니다.

구글의 브라우저 보안 핸드북에 따르면 , 쿠키 범위는 기본적으로 현재 호스트 이름의 모든 URL로 제한되며 포트 또는 프로토콜 정보에는 제한되지 않습니다. 나중에 일부 라인 쿠키를 하나의 DNS 이름으로 만 제한 할 수있는 방법은 없으며 […] 마찬가지로 특정 포트로 제한 할 수 없습니다. (또한 IE는 포트 번호를 동일 출처 정책 에 전혀 고려하지 않습니다 .)

따라서 여기에 잘 정의 된 동작에 의존하는 것이 안전하지 않은 것 같습니다.


답변

이것은 정말 오래된 질문이지만 내가 사용한 해결 방법을 추가 할 것이라고 생각했습니다.

랩톱에서 두 가지 서비스를 실행하고 있습니다 (하나는 포트 3000과 다른 하나는 4000). ( http://localhost:3000http://localhost:4000) 사이를 이동하면 Chrome이 동일한 쿠키를 전달하며 각 서비스는 쿠키를 이해하지 못하고 새 쿠키를 생성합니다.

Chrome에 로컬 호스트 용 쿠키와 127.0.0.1 용 쿠키를 보관 한 후 http://localhost:3000http://127.0.0.1:4000에 액세스 하면 문제가 해결되었습니다.

다시 말하지만,이 시점에서 아무도 신경 쓰지 않을 수 있지만 내 상황에 쉽고 도움이되었습니다.


답변

쿠키 SOP (Same Origin Policy)에서 큰 회색 영역입니다.

이론적으로 도메인에서 포트 번호를 지정할 수 있으며 쿠키는 공유되지 않습니다. 실제로 이것은 여러 브라우저에서 작동하지 않으며 다른 문제가 발생합니다. 따라서 사이트가 일반 사용자 용이 아니며 사용할 브라우저를 제어 할 수있는 경우에만 가능합니다.

더 좋은 방법은 쿠키의 포트 번호에 의존하지 않고 동일한 IP에 대해 2 개의 도메인 이름을 얻는 것입니다.


답변

문제점을 해결하는 다른 방법은 세션 쿠키의 이름을 포트 관련으로 만드는 것입니다. 예를 들면 다음과 같습니다.

  • 포트 8080에서 실행중인 서버의 경우 mysession8080
  • 포트 8000에서 실행되는 서버의 경우 mysession8000

코드는 웹 서버 구성에 액세스하여 서버가 사용하는 포트를 확인하고 그에 따라 쿠키 이름을 지정할 수 있습니다.

애플리케이션은 두 쿠키를 모두 수신하므로 포트에 해당하는 쿠키를 요청해야합니다.

쿠키 이름에 정확한 포트 번호를 지정할 필요는 없지만 더 편리합니다.

일반적으로 쿠키 이름은 사용하는 서버 인스턴스에 특정한 다른 매개 변수를 인코딩 할 수 있으므로 올바른 컨텍스트로 디코딩 할 수 있습니다.


답변

IE 8에서는 쿠키 (로컬 호스트에 대해서만 확인)가 포트간에 공유됩니다. FF 10에서는 그렇지 않습니다.

독자가 각 시나리오를 테스트하기위한 하나 이상의 구체적인 옵션을 갖도록이 답변을 게시했습니다.


답변

같은 컴퓨터에서 두 개의 다른 장고 응용 프로그램을 실행하고 디버깅하려고하는 비슷한 문제가 발생했습니다.

나는이 명령으로 그들을 실행했다 :

./manage.py runserver 8000
./manage.py runserver 8001

첫 번째 로그인 한 다음 두 번째 로그인 할 때 항상 첫 번째 로그인을했고 그 반대도 마찬가지였습니다.

/ etc / hosts 에 이것을 추가했습니다.

127.0.0.1    app1
127.0.0.1    app2

그런 다음이 명령으로 두 개의 앱을 시작했습니다.

./manage.py runserver app1:8000
./manage.py runserver app2:8001

문제 해결됨 🙂