2013-08-20 3 views
4

Google 웹 로그 분석과 기능적으로 유사한 웹 사이트를 구축하고 있습니다. 나는 분석을하고있는 것이 아니라, 한 줄의 자바 스크립트 또는 한 줄의 iframe을 제공하여 다른 웹 사이트에 기능을 추가하려고합니다.삽입 된 iframe/javascript 위젯의 보안

특히 삽입 된 콘텐츠는 새 창을 팝업하고 사용자가 일부 작업을 수행 할 수있게 해주는 버튼입니다. 결국 사용자가 완료되고 창이 닫히고 버튼이 사용자가 흐름을 완료 한 것을 반영하는 새 요소로 업데이트됩니다.

팝업 창이 내 사이트의 콘텐츠를로드하지만 내 질문은 javascript (또는 iframe)의 삽입 된 행과 관련이 있습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? Google 웹 로그 분석은 자바 스크립트를 사용하여 호스트 페이지를 수정합니다. 분명히 iFrame도 작동합니다.

내가 가진 보안 문제는 누군가가 한 사이트의 퍼가기 코드를 복사하여 다른 사이트에 저장한다는 것입니다. 내 script/iframe을 구현하는 각 페이지/사이트 조합에는 사이트의 개발자가 내 사이트의 인증 된 계정에서 생성하는 고유 한 ID가 있습니다. 그런 다음 적절한 임베드 코드를 제공합니다.

첫 번째 생각은 페이지/사이트 콤보에 특정한 URL 매개 변수로 내 사이트에서 페이지를로드하는 iframe을 사용하는 것이 었습니다. 해당 경로로 이동하면 특정 도메인이나 URL 접두어에 삽입 된 iframe에서만 페이지가로드되는지 확인하는 방법이 있습니까? 비슷한 자바 스크립트를 수행 할 수 있습니까?

나는 매우 도움이되는 this post을 읽었지 만 실제로 사용자와 상호 작용할 수있는 콘텐츠를 팝업 할 것이므로 사용 사례가 조금 다릅니다. 우려 사항은 내 퍼가기를 호스팅하는 사이트의 적군이 기꺼이 자신의 사용자가 위젯을 사용하도록 유도한다는 것입니다. 이 사용자는 적 사이트를 대신하여 내 사이트와 상호 작용하지만 실제로 친숙한 사이트를 대신하여 상호 작용하고 있다고 생각합니다.

답변

6

간단한 클라이언트 측 위젯으로 유지하려는 경우 간단히 대답하면 설명하는 것과 똑같이 할 수 없다는 것입니다.

이 두 가지 해결책은 다음과 같습니다. 첫 번째는 절충이지만 간단하고 두 번째는 조금 더 복잡합니다 (위젯의 사용자 모두에게).

당신은 도메인이 특정 사이트의 ID 예상과 일치하는지 확인하기 위해 referer HTTP header를 확인할 수 확인하지만, 모든 브라우저가이 보내드립니다 것을 명심 (대부분의 경우하지 않습니다 리퍼러 추천 페이지는 HTTPS입니다.) 그리고 일부 브라우저 개인 정보 보호 플러그인을 보류하도록 구성 할 수 있습니다.이 경우 위젯이 작동하지 않거나 사용자 환경에 여분의 불편한 단계가 필요할 수 있습니다.

  1. 웹 사이트 www.foo.com이 내장 된 스크립트를 말할 사용하여 위젯을 내장 <script src="//example.com/widget.js?siteId=1234&pageId=456"></script>
  2. 위젯은의 .js 동적으로 파일을 생성하는 서버 측 코드를 사용 (예를 들어 서버에 재 작성 규칙에 따라 수의 .js 파일에 대한 요청 PHP/ASPX로 매핑).
  3. 서버 측 코드는 referer HTTP 헤더를 검사하여 데이터베이스의 예상 값과 일치하는지 확인합니다.
  4. 위젯이 정상적으로 실행됩니다.리퍼러가 누락 된/비어있는 경우 불일치에
  5. 하거나, 위젯은 여전히 ​​실행되지만, 확인을 위해 그들이 www.foo.com
  6. 에서 위젯에 액세스 한 것을 확인하도록 요청합니다 추가 단계가있을 것입니다 clickjacking에서 안전하려면 open the confirmation step in a popup window이어야합니다.

서버 점검

이 당신의 목적을 위해 설계 및 위젯을 포함하고자하는 고객을 위해 너무 복잡지고의 위험을 실행을 통해 조금 할 수 - 당신이 결정한다.

  1. 웹 사이트 www.foo.com은 사용자로부터받은 현재 페이지 요청에 대한 위젯을 포함하려고합니다.
  2. www.foo.com 서버는 페이지 ID에 대해 한 번 키를 요청, API를 사용하면 호스트 (비밀 키를 전달) API 요청을 만드는 456
  3. 귀하의 API는, 비밀 키를 검증하는 보안 한 번에 키와 패스를 생성 요청을 데이터베이스에 기록하는 동안 값을 되돌려 놓으십시오. <script src="//example.com/widget.js?siteId=1234&oneTimeKey=231231232132197"></script>
  4. 위젯 동적으로 JS 파일을 생성하는 서버 측 코드를 사용하여 다음과 같이
  5. www.foo.com 스크립트를 임베드 (예를 들어,의 .js는 PHP/ASPX에 매핑 서버에 재 작성 규칙을 따를 수있다).
  6. 서버 측 코드는 oneTimeKeysiteId 조합을 검사하여 유효한지 확인하고, 유효하다면 위젯 코드를 생성하고 데이터베이스 레코드를 삭제합니다.
  7. 사용자가 페이지를 다시로드하면 위의 단계가 반복되어 새로운 한 시간 키가 생성됩니다. 그러면 퍼가기 코드와 매개 변수를 긁어내는 페이지의 evil.com을 방지 할 수 있습니다.
0

여기에 대한 응답은 매우 철저하며 많은 훌륭한 정보와 아이디어를 제공합니다. 서버 측에서 X-Frame-Options 헤더를 검증함으로써이 문제를 해결했지만, 브라우저의 지원이 불완전하고 스푸핑이 가능할 수도 있습니다.

+0

그럼 정말로 "문제를 해결하지 못했습니다." –