2013-06-30 3 views
1

타사 API (x.apisite.comy.apisite.com에 있음)에 액세스해야하는 Javascript가있는 웹 앱을 작성하고 있습니다. XMLHTTPRequest을 사용했지만 내 로컬 서버에서 파일을 제공 할 때 동일한 출처 정책으로 인해 실패합니다.DNS 속임수로 같은 출처 정책을 외면 함

이제이 웹 앱은 내 모바일 장치에 설치되어 다운로드 된 파일이 캐시됩니다. 그래서 내 DNS 항목을 x.apisite.comy.apisite.com으로 변경했습니다. 그런 다음 파일을 다운로드 한 다음 DNS 항목을 올바른 항목으로 다시 변경합니다. 나는 브라우저가 스크립트가 *.apisite.com에서 다운로드되었다고 생각했기 때문에 을 *.apisite.com으로 만들 수 있다고 생각했습니다. 그러나 이것이 사실 인 것처럼 보이지는 않습니다. 여전히 동일한 출처 정책 오류가 발생합니다.

내가 뭘 잘못하고 있니?

는 여기에 내가 뭘하는지의 기본적인 생각 : script-0.js에서

<!DOCTYPE html> 
<html> 
    <head> 
     <!-- this will actually be downloaded from my own local server --> 
     <script src="http://x.apisite.com/script-0.js"> 
     <script src="http://y.apisite.com/script-1.js"> 
... 

가, 내가 XMLHTTPRequestx.apisite.com에을하고, 마찬가지로 script-1.js에, 나는 y.apisite.com에 액세스 할 수 있습니다.

+0

"브라우저가'* .apisite.com '에서 스크립트를 다운로드했다고 생각했기 때문에'XMLHTTPRequests'를'* .apisite.com'으로 만들 수 있습니다 * * - 클라이언트 측 스크립트의 출처는 동일한 출처 규칙과 관련이 없습니다. SOP 용어에서 소스 출처는 항상 스크립트를로드하고 일부 작업을 수행하는 실제 페이지 *의 출처입니다. DNS 속임수로 도망 갈 수는 있지만, 브라우저가 속임수를 써서 HTML 페이지 자체가 'apisite.com'에 있다고 생각하면됩니다. – apsillers

답변

1

실무적인 답변 (권장하지 않음) : 통제하는 도메인의 제 3 자 도메인에 CNAME 레코드를 만든 다음 해당 도메인을 사용하고 제 3 자의 호스트가 HTTP 호스트 헤더를보고 있지 않기를 바랍니다. 클라이언트가 타사 호스트를 인증하려고 시도하면이 작업이 수행되지 않습니다. 예를 들어 HTTPS를 사용할 때 (일부 클라이언트 브라우저는 특정 시나리오에서 HTTPS 사용을 강제 할 수 있습니다).

이상 응답 : CORS를 사용하여 원래 도메인에서 온 코드로 요청한 요청을 제 3 자에게 승인하도록 요청하십시오 (일부 호스트는 이미 모든 출처의 코드 요청을 허용하므로 확인해야합니다).

대안 : 제 3자가 도메인의 코드로 원본 출처 요청을하기 위해 고객에게 계속 진행하기를 원하지 않는 경우 서버에서 직접 요청해야합니다. 클라이언트 브라우저에 보내는 코드는 동일한 출처와 만 상호 작용할 것이지만, 이는 사용자가 자신의 자격 증명을 요청할 때 자격 증명을 신뢰해야하거나 (관련이있는 경우) 자격 증명이 있어야한다는 것을 의미합니다 자신의 서버를 타사 호스트에 인증 할 수 있기 때문에 원하는 모든 작업을 수행 할 수 있습니다. 또한 애플리케이션에 따라 무거울 수도 있고 그렇지 않을 수도있는 트래픽로드를 취하는 것을 의미합니다. 잠재적으로 많은 다른 의미가 있습니다.이 모든 것은 사용자가 명시 적으로 이러한 요청에 대한 책임을진다는 사실에서 파생됩니다.

참고 : 다소 복잡해 보일 수 있지만 사용자, 클라이언트 브라우저, 브라우저에서 실행되는 코드, 코드의 출처, 도메인의 신뢰 메커니즘을 이해하는 것이 유용 할 수 있습니다. 그 코드는 요청을합니다. 항상 각 당사자의 이익을 염두에 두십시오. 특정 문제에 대한 해결책을 쉽게 찾을 수 있습니다.

최종 답변 (모든 사람들은 그것을 싫어하지만 예상했을 것입니다) : "정확히 무엇을하려고하는지에 달려 있습니다." (죄송합니다.)

관련 문제