2011-10-12 1 views
3

iframe 접근 방식을 사용하여 새 캔버스 응용 프로그램을 작성했습니다. 백엔드는 캔버스 응답을 위해 HTTP와 HTTPS를 모두 지원하지만 기본적으로 Facebook은 사용자를 HTTP에 배치하고 모든 중요한 자격 증명 (즉, signed_request 페이로드 등의 액세스 토큰)을 HTTP를 통해 일반 텍스트로 보냅니다. 이것은 물론 공유 네트워크 (커피 숍, 사무실 등, 액세스 토큰 냄새를 맡지 않는 것이 중요합니다.)의 보안 취약점입니다.signed_request 내용을 보호하기 위해 캔버스 URL에 HTTPS를 사용해야 할 수 있습니까?

HTTPS를 통해 모든 캔바스 요청을 강제로 작동시키고 사용자 자격 증명?

모든 개발자는이를 수행하기를 원하거나 필요하다고 생각합니다. Facebook 개발에 익숙하지는 않지만 사용자 액세스 토큰의 모든 직접 전송에 HTTPS를 사용하지 않는 것이 놀랍습니다. Oauth 1.0에는 HTTP를 통한 액세스 토큰의 사용을 가능하게하는 메커니즘이 있었지만 OAuth 2.0에서는 모든 자격 증명에 HTTPS를 사용하여 자격 증명을 포함하도록 요청했습니다. 페이스 북은 OAuth 2.0을 설계하는 데 도움을 주었고, 캔버스 요청에서 HTTPS 사용을 벗어나 디자인의 보안을 약화시켰다.

답변

0

PHP 또는 JavaScript를 사용하면 쉽게이를 수행 할 수 있습니다. 사용자가 HTTP를 사용하고 HTTPS로 리다이렉트하는 경우에만이를 감지해야합니다. 예 :

<script> 
if (window.location.protocol == 'http:') { 
    window.top.location = 'https://facebook.com/yourapp'; 
} 
</script> 

위의 코드는 iframe이 HTTP를 사용하여로드되었는지 확인합니다. 이 경우 상위 URL (즉, Facebook)을 재설정하여 웹 사이트의 HTTPS 버전을 가리 킵니다 (따라서 HTTPS를 사용하여 iframe을로드 할 수도 있음).

+0

고마워요.하지만이 자바 스크립트가 중요한 세션 자격 증명을 실행하면 이미 HTTP를 통해 명확한 상태로 전송됩니다. 세션을 실제로 보안하려면 처음부터 HTTPS 여야합니다 ... – Yetanotherjosh

+0

앱 설정에서 앱에 액세스하기위한 비보안 URL을 언제든지 삭제할 수 있습니다. –