2010-02-16 2 views
4

Google 사이트의 콘텐츠를 다른 사용자의 웹 사이트에 퍼갈 수 있도록 허용해야합니다. conent는 유료이므로 보안을 유지해야하지만 요구 사항 중 하나는 가입 웹 사이트가 일부 자바 스크립트를 페이지에 드롭해야한다는 것입니다.내 사이트에서 콘텐츠를 안전하게 가져올 수있는 자바 스크립트 위젯을 사용자에게 제공하려면 어떻게해야합니까?

콘텐츠를 보호하는 유일한 방법은 자바 스크립트를 호스팅하는 페이지의 URL을 확인하는 것입니다. 구독 사이트와 일치합니다. 구독 사이트를 방문 할 클라이언트 브라우저를 모른다는 점을 감안할 때 다른 방법이 있습니까?

페이지가로드 될 때 알려진 페이지 요소를 채우는 자바 스크립트 포함 파일을 제공하는 가장 좋은 방법은 무엇입니까? include 파일이 jquery (이미로드되어 있는지 확인하고 일종의 네임 스페이스 보호를 사용하고 있는지 확인)를 호출 한 다음 페이지로드시 주어진 요소를 채우도록 jquery를 사용하려고합니다.

가능한 경우 스타일 시트를 포함하고 싶습니다. 그러나 자바 스크립트와 함께로드 할 수 있는지 잘 모르겠습니다.

합리적인 방법으로 들리는가요? 내가 고려해야 할 것이 있습니까? 사전에

감사합니다,

마이크

+0

하나에 오신 것을 환영합니다! – Sampson

+0

감사합니다. Jonathan, 사이트에서 좋은 팁을 발견했습니다 – Mike

답변

5

그것은 우리의 컨텐츠를 확보 할 수있는 유일한 방법처럼 보이는 우리의 자바 스크립트가 일치 호스팅하는 페이지의 URL을 확인하는 것입니다 구독 사이트.

아,하지만 클라이언트 측 코드 또는 서버 측 코드가 있습니까?

둘 다 단점이 있습니다. 일부 브라우저는 Referer 헤더를 전혀 전달하지 않으므로 서버 측 코드로 작업하는 것이 신뢰할 수 없습니다. 스크립트의 복사본을 유지하면서 캐시를 중단하고 Referer-check가 발생하지 않도록하려면 서비스해야합니다 nocache 또는 Vary: Referer 헤더를 사용하면 성능에 영향을 미칩니다.

반면에 반환하는 스크립트에서 클라이언트 측 검사를 수행하면 실행중인 환경이 방해받지 않았는지 확인할 수 없습니다.예를 들어 당신의 포함 스크립트 태그와 같은 인 경우 :

<script src="http://include.example.com/includescript?myid=123"></script> 

및 서버 측 스크립트는 도메인 customersite.foo를 사용하여 고객의 ID,이 스크립트로 응답 할 수있는 것으로 123을 보았다 :

if (location.host.slice(-16)==='customersite.foo') { 
    // main body of script 
} else { 
    alert('Sorry, this site is not licensed to include content from example.com'); 
} 

포함 사이트가 String.prototype.slice을 항상 customersite.foo을 반환하는 함수로 바꿀 수 있다는 점을 제외하고는 어느 정도 간단합니다. 또는 스크립트 본문에 사용 된 여러 가지 다른 기능이 용의가있을 수 있습니다.

다른 보안 컨텍스트의 <script>을 포함하면 포함 사이트가 원본 사이트를 신뢰해야 최종 사용자 암호를 도용하거나 큰 goatse로 바꾸는 보안 컨텍스트에서 문제가 발생하지 않습니다. 그러나 원본 사이트의 코드는 포함 사이트의 잠재적으로 악의적으로 사용자 지정된 보안 컨텍스트의 게스트 일뿐입니다. 한 사이트에 다른 사이트의 스크립트가 포함되어있는 경우 두 당사자간에 신뢰의 척도가 존재해야합니다. 도메인 검사는 절대 100 % 절대 안전한 보안 메커니즘이 아닙니다.

가능한 경우 스타일 시트를 포함하고 싶습니다. 그러나 자바 스크립트와 함께로드 할 수 있는지 잘 모르겠습니다.

확실히 스타일 시트 요소를 문서의 head 요소에 추가 할 수 있지만 다른 페이지 스타일을 방해하지 않도록 강력한 네임 스페이스가 필요합니다. 단순화를 위해 인라인 스타일을 사용하고 페이지의 기본 스타일 시트에서 특수성을 방해하지 않으려는 경우가 있습니다.

실제로 생성 된 콘텐츠를 호스트 페이지에 포함 시킬지 여부에 따라 달라집니다 (이 경우 포함 사이트에서 자신이 원하는 스타일을 포함하도록 할 수도 있습니다). 혼자, 컨텍스트에 영향을받지 않습니다 (이 경우 자신의 스타일로 에 콘텐츠를 넣는 것이 더 나을 것입니다). (가) 내가 호스트 페이지에 jQuery를 잡아 당겨 피하려고 할 파일이 처음

JQuery와

에 전화 것 포함 있도록

내가 jQuery를 사용하여 생각 해요. noconflict을 사용해도 다른 프레임 워크와 같이 복잡한 스크립트가 존재할 것으로 예상하지 않는 다른 스크립트와 충돌 할 수 있습니다. 동일한 페이지에서 두 개의 프레임 워크를 실행하는 것은 이상한 오류를 만드는 방법입니다.

(당신이 <iframe> 경로를했다하면, 다른 한편으로는, 당신이 갖고 노는 자신의 스크립트 컨텍스트를 얻을 때문에이 문제가되지 않을 것입니다.) 스택 오버플로, 마이크에

+0

정보를 제공해 주셔서 감사합니다. 몇 가지 사항을 생각하고 명확하게 해줍니다. – Mike

+0

@bobince 포함 사이트가 "위치"를 대체 할 수 있습니까?호스트 "기능과"String.slice "기능은 무엇입니까? –

+1

@ Murat : 예, 위치 정보로 정확히 무엇을 할 수 있는지에 관한 브라우저 단점이 있습니다 .IOS에서는 전체 '위치'개체를 바꿀 수 있습니다. 'Object.defineProperty' 기존의'location' 객체에 대한 대체 속성 – bobince

2

당신은 사용자의 도메인 및 로컬 데이터베이스 내에서 키를 저장할 수 있습니다. 즉, 키는 데이터베이스 조회를 수행하지 못하도록 도메인의 암호화 된 버전 일 수 있습니다. 이 중 하나가 요청에 응답해야하는지 여부를 결정할 수 있습니다.

요청이 유효하면 데이터를 다시 사용자에게 보낼 수 있습니다. 이 데이터는 실제로 jQuery 및 추가 CSS 참조에서로드 될 수 있습니다.

관련이 :

  1. How to load up CSS files using Javascript?
  2. check if jquery has been loaded, then load it if false
+1

+1. 부수적으로, 제 3 자 사이트에서 내 페이지에 스크립트를로드하는 것에 대해 특히 신중해야합니다. 특히 https가 아닌 경우에는주의해야합니다. 내 페이지의 DOM에 제 3 자 액세스를 허용하는 것을 원하지 않는 가운데 잠재적 인 MITM 공격을 열어줍니다. 대부분의 위젯 공급자는 관련된 모든 당사자에게 보안을 제공하기 위해 iframe을 사용해야합니다. iframe은 투명 할 수 있으며 css 파일의 위치를 ​​제공하는'get' 매개 변수를 제공 할 수도 있습니다. –

+0

+1 @Andy. 좋은 정보. – Sampson

+0

정보를 제공해 주셔서 감사 드리며, 더 자세히 조사하겠습니다. – Mike

관련 문제