Socket.io가 핸드 셰이크에서 쿠키를 보내지 않아 요청이 중단됨

jrthib

내 설정을 설명하겠습니다. example.com과 같은 기본 도메인 이름에 대한 모든 CNAME 레코드 인 여러 도메인 이름이 있습니다.

example.com-> serverIP

company1.example.com-> example.com

company2.example.com-> example.com

저는 기본적으로 소프트웨어가 단순히 리퍼러를 감지하고로드 할 로고 및 스타일 시트 자산을 알고있는 흰색 레이블이 지정된 소프트웨어 버전을 개발하고 있습니다.

그래서 그것은 모두 훌륭하고 좋지만 socket.io가 http://company1.example.com/socket.io/1/?key=123456 과 같은 URL로 핸드 셰이크를 시도 하면 요청이 보류 중입니다. 앱에 로그인 할 때 상태. 기본 도메인 인 example.com에서는 모든 것이 잘 진행됩니다. 주 도메인은 쿠키를 socket.io 핸드 셰이크 URL로 보내는 반면 회사 하위 도메인은 그렇지 않습니다.

누구든지 이것을 고치는 방법에 대한 아이디어가 있습니까? 서버에 도달하지 않는 것 같으며 몇 분 후에 보류중인 요청이 완료 될 수 없다는 메시지를 반환합니다.

파리 드 누리 네 샤트

두 가지 선택이 있습니다.

  1. 인증을 위해 쿠키를 사용하지 마십시오. 토큰 기반 방법을 사용하십시오. 클라이언트가 앱에 연결되는 즉시 인증 토큰을 보내십시오. localstorage에 토큰을 저장할 수 있으며 처음으로 서버에서 토큰을 javascript 또는 html에 포함 할 수 있습니다.

    왜 토큰을 사용하지 말아야하는지 궁금하다면 socket.io 와 유사한 것을 구현하는 sockjs-node 문서에서 이것을 읽으십시오.

    쿠키는 브라우저와 http 서버 간의 계약이며 도메인 이름으로 식별됩니다. 브라우저에 특정 도메인에 대한 쿠키 세트가있는 경우 모든 http 요청의 일부로 호스트에 전달합니다. 그러나 다양한 전송이 작동하도록 SockJS는 중개자를 사용합니다.

    대상 SockJS 도메인에서 호스팅되는 iframe. 즉, 서버는 실제 도메인이 아닌 iframe에서 요청을받습니다. iframe의 도메인은 SockJS 도메인과 동일합니다. 문제는 모든 웹 사이트가 iframe을 포함하고 그것과 통신 할 수 있고 SockJS 연결 설정을 요청할 수 있다는 것입니다. 이 시나리오에서 승인을 위해 쿠키를 사용하면 모든 웹 사이트에서 귀하의 웹 사이트와의 SockJS 통신에 대한 전체 액세스 권한이 부여됩니다. 이것은 전형적인 CSRF 공격입니다. 기본적으로 쿠키는 SockJS 모델에 적합하지 않습니다. 세션을 승인하려면 페이지에 고유 한 토큰을 제공하고 SockJS 연결을 통해 가장 먼저 전송하고 서버 측에서 유효성을 검사합니다. 본질적으로 이것이 쿠키가 작동하는 방식입니다.

    또한 이 기사를 예제 구현 으로 확인 하십시오 .

    그래도 확신 할 수 없다면 선택 2 번을 확인하십시오.

  2. 쿠키를 계속 사용하십시오. 그래도 작동하지 않을 수 있습니다. 최신 socket.io (0.9.x 또는 1.x)로 업그레이드하십시오. 0.9.x를 사용하여 원본 구성 속성을 설정합니다 . 또는 1.x에서 origins서버 옵션을 설정하십시오 . *:*또는로 설정할 수 있습니다 *example.com:*.

    또한이 질문을 확인하십시오 : CORS with socket.io

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

도메인 간 POST 요청이 쿠키를 보내지 않습니다. Ajax Jquery

Java가 SSL 핸드 셰이크 중에 클라이언트 인증서를 보내지 않는 이유는 무엇입니까?

SSLException : HelloRequest 다음에 예기치 않은 핸드 셰이크 메시지가 표시됨

Go에서 socket.io 핸드 셰이크 쿼리를 얻는 방법

jquery의 .ajax () 메서드가 세션 쿠키를 보내지 않는 이유는 무엇입니까?

Apache HttpClient 4.4로 업그레이드 한 후 요청과 함께 쿠키를 보내지 않습니다.

Grizzly Server가 SSL 핸드 셰이크를 중단했습니다.

jsoup이 이전 요청에서 쿠키를 보내지 않음-버그?

git 및 "서버가 SSL 핸드 셰이크를 중단했습니다"오류

'ws : //.../socket.io/'에 대한 WebSocket 연결 실패 : WebSocket 핸드 셰이크 중 오류 : net :: ERR_CONNECTION_RESET

javax.net.ssl.SSLException : Android 이전 기기에서 SSL 핸드 셰이크가 중단됨

socket.io에서 Cloudflare SSL 핸드 셰이크 실패

iOS 11.4의 Safari가 POST 요청에 쿠키를 보내지 않음

Socket.IO 핸드 셰이크 보안 플래그 항상 False

Internet Explorer가 요청 헤더에 jsessionid 쿠키를 보내지 않는 이유는 무엇입니까?

쿠키 정보 팝업 메이커-이용자가 거부 한 후 쿠키를 보내지 않는 방법은?

Android Emulator에서 SSL 핸드 셰이크 중단됨

도메인 간 POST 요청 중에 가져 오기가 보안 쿠키를 보내지 않습니다.

ASP.net MVC Core / Signal R Core-서버에서 핸드 셰이크 오류를 반환했습니다. 연결 핸드 셰이크 중에 예기치 않은 오류가 발생했습니다.

AngularJS $ http ajax 요청이 비동기 적이 지 않아 페이지가 중단됨

TCP 클라이언트는 핸드 셰이 킹 중에 ACK를 보내지 않습니다.

Unity3d 및 Sockets.IO가 핸드 셰이크하지 않습니다.

angular-socket-io가 'WebSocket 핸드 셰이크 중 오류 : 예기치 않은 응답 코드 : 400'로 불평하는 이유는 무엇입니까?

SSL 핸드 셰이크 중에 클라이언트 인증서가 제공되지 않았습니다.

패키지 업데이트 요청시 R 스크립트가 중단됨

PHP 쿠키는 웹 소켓 핸드 셰이크에 의해 설정되지 않습니다.

microsoft.com에 대한 TLS 핸드 셰이크가 중단됨

Heroku가 SSL 핸드 셰이크를 중단하지만 GitHub가 아닌 이유는 무엇입니까?

Node.js-Socket.io-client가 데이터를 내 보내지 않습니다.

TOP 리스트

뜨겁다태그

보관