2012-05-24 4 views
2

여유 시간에 webapp에서 작업했습니다.혼합 HTTP/HTTPS 웹 사이트의 통합 문제

주로 공개적으로 퍼블리싱/컨텐트를 사용하기 때문에 콘텐츠는 공개적으로 볼 수 있으며 http를 통해 공개됩니다. 또한 타사 위젯을 허용/포함하므로 http 액세스가 필요합니다 (많은 공급 업체가 https 버전을 가지고 있지 않으며 https 페이지에 http라는 혼합 콘텐츠 문제가 있음). 이 및 기타 비즈니스 목표로 인해 사이트의 99 %가 http에서 사용할 수 있어야합니다.

지금까지 구현 한 보안 잠금 방식

은 이것이다 : /이 &/API는 HTTPS를 통해 처리 및 HTTPS 전용 쿠키되는 계정

  • 모두가 같은 도메인에
  • 전부입니다. 이러한 보안 세션 ID 만 개인 식별 가능 자료에 대한 쓰기 또는 액세스에 사용될 수 있습니다.
  • 다른 모든 것은 http 쿠키를 통해 처리되며 별도의 http 쿠키 집합으로 처리됩니다. 이 쿠키는 누군가가 즐겨 찾기 또는 사회 활동을 수행하고자하는 경우

    없습니다 ... '기록'에 대한 민감한 내용) 문제로 날 리드

을보고, 브라우저 기반 자바 스크립트 사용자 정의를 위해 주로이다 웹 애플리케이션에서는 HTTPS 채널을 통해 HTTPS 쿠키 등을 사용하여 처리해야하지만 브라우저의 원본 정책은 http와 https를 두 개의 다른 서버로 간주합니다.

저는 HTTP 콘텐츠에서 HTTPS 서버에 대한 API 호출을 허용하는 효과적인 (그리고 간단하고 바람직한) 방법을 생각하려고합니다. 내 첫 번째 생각은 JSONP를 사용하는 것이지만 세션 쿠키가 필요하며 이는 나에게 보이지 않는다.

제안 사항이 있습니까?

답변

3

워크 플로를 이해해 봅시다. HTTP 페이지가 HTTPS 서버를 호출해야하며, 그러면 세션 쿠키에 액세스하고 HTTP 페이지에 응답 할 수 있어야합니다. 맞습니까?

이렇게하는 한 가지 방법은 별도의 iframe을 사용하여 서버와 통신하는 스크립트를 호스팅하고 HTML5 postMessage을 사용하여 기본 페이지와 iframe을 통신하게하는 것입니다. 그래서, 단계가 될 것이다 위의 워크 플로우를 실현하기 :

  1. 을 당신은 (직렬화) 요청 매개 변수와 함께, iframe을에 postMessage를 사용;
  2. iframe의 메시지 콜백이 요청을 수신하면 이 페이지에서 왔음을 확인하고 서버에 Ajax 요청을 제출합니다 (세션 쿠키 전달).
  3. 응답을 수신하고 일련 번호를 지정하고 postMessage을 사용하여 기본 페이지로 전송합니다.
  4. 메인 페이지의 메시지 콜백이 응답을 받고 그걸로 무언가를합니다.

단일 함수 호출 내에서 캡슐화하지 않아야합니다.여기서 다루기 힘든 부분은 위에있는 대담한 부분입니다. iframe의 스크립트가 올바른 페이지에서 오는 것인지 제대로 확인하지 못하면 CSRF 취약성이 생길 수 있습니다 (악의적 인 페이지가 iframe에 보안 스크립트를 포함시키고 요청을 보내면 그 일이 생기면 사용자가 인증을받는 한 iframe은 요청을 존중합니다).

이 문제는 불행히도 제가 제안 할 수있는 것이 거의 없습니다. HTTP 페이지에 HTTPS 컨텐트를 임베드하는 것은 전반적으로 나쁜 생각이지만, 그렇게 할 이유가 있으므로 보안 관련 사항도 처리해야합니다.

관련 문제