2011-08-08 3 views
1

다른 서버에있는 html 문서에서 참조되는 우리 서버의 이미지 파일을 제공하는 임무를 맡았습니다. 재치하려면 foo.com에스크립팅하지 않고 HTTP 요청의 출처를 신뢰할 수 있습니까?

파일 :
<img src='http://bar.com/image.jpg'>

을 사용자가 foo.com에 갈 때, 그것은 우리의 서버, bar.com에서 이미지를 표시합니다. (실제로 어떤 웹 사이트가 요청을했는지에 따라 다른 이미지를 전송합니다.)

그러나 여기에는 특정 회사의 방문자가 파일 (현재 서버의 도메인 이름으로 식별되는 방문자)을 검색 할 수 있기를 원합니다. 요구 사항이 아님).

완벽한 세계에서는 HTTP_REFERER 만보고 승인 목록에있는 경우 파일을 제공하십시오. 그러나 모든 사람이 알고 있듯이 모든 사용자 에이전트가 HTTP_REFERER를 제공하는 것은 아니며 어쨌든 스푸핑 될 수 있습니다.

자바 스크립트 나 PHP를 실행하지 않아도되지만 스크립팅을하지 않아도 가능합니다.

그렇지 않은 경우 다른 웹 사이트에서 파일 다운로드를 위장 할 수 없도록 자바 스크립트 만 사용하는 방법이 있습니까?

그렇지 않은 경우 PHP를 사용하여 어떻게 접근합니까?

+0

파일을 다운로드하는 웹 사이트에 대해 이야기하고 있습니까? 파일은 웹 사이트가 아닌 브라우저에서 클라이언트에 의해 다운로드됩니다. 페이지, 스크립트, 이미지 등에 관계없이 각각의 HTTP 요청은 별도의 요청으로 사용자가 브라우징하는 웹 사이트가 아닌 사용자의 브라우저에서 전송됩니다. –

+0

서버 간 다운로드가 가능합니다. 하지만 OP가 "다운로드를 인증하는 좋은 방법은 무엇인가"물어 보려고합니다. – Evert

+0

그래, 사용자 에이전트가 다운로드를하고 궁극적으로 HTTP_REFERER로는 신뢰할 수 없다는 점이 궁금합니다. . 나는 인증 된 다운로드를 원하지 않는다. 나는 "white listed"서버의 공용 사용자가 이미지를 볼 수 있지만 다른 서버는보고 싶지 않습니다. – pbarney

답변

3

승인 된 회사의 웹 앱에 영향을 미칩니 까? 그렇다면, 나는 이것을 달성 할 수있는 두 가지 방법을 생각할 수 있습니다.

당신의 foo는/바 예제를 사용하여, bar.com은 서버이며, foo.com은 승인 된 회사 중 하나입니다 :

1) 대신 서버에 요청하는 브라우저, 그들이 만들어왔다 foo.com의 이미지 핸들러에 대한 요청. 그러면 뒤에서 서버에 HTTP 요청을 보내고 이미지 내용을 클라이언트에 반환합니다. Foo의 발신 IP 주소는 서버의 화이트리스트에 있으므로 모든 요청은 실제로 Foo의 IP 주소에서옵니다.클라이언트는 볼 것이다 : 푸 서버에 요청을 할 수없는 경우

<img src="http://foo.com/imagehandler.php" /> 

2) 훨씬 더 어려운,하지만, 푸 이미지 태그의 쿼리 문자열에 특별한 해시를 넣을 수있는 브라우저가을 할 때 수 있도록 서버에 요청하면 URL이 Foo에 의해 작성되었음을 알 수 있습니다. 해시를 계산할 수 있도록 Foo의 서버에 개인 키가 필요합니다.

나는 해시가 브라우저의 IP 주소, 현재 날짜/시간 및 비공개 키의 조합을 기반으로 계산 된 것 같습니다.

그래서 브라우저는 foo.com/default.php 요청을 만들 것, 그리고 푸 브라우저에 대한 다음과 같은 이미지 태그를 구축 할 것입니다 : 그 숫자가 적절한 해시를 나타냅니다

<img src="http://bar.com/imagehandler.php?hash=393923A423B423F234C34" /> 

. Bar의 이미지 처리기 코드에서 Foo 및 Bar에만 알려진 개인 키, GET 요청의 일부인 IP 주소 및 현재 날짜/시간을 기반으로 해당 해시를 다시 계산해야합니다. 해시가 일치하면 브라우저가 foo.com의 웹 사이트를 확인하고 이미지 콘텐츠를 반환 할 수 있습니다.

3

간단히 말해서, 아니요. 신뢰할 수있는 유일한 정보는 이미지를 요청한 IP 주소이지만 프록시 일 수도 있습니다. 이미지가 요청 된 이미지 (즉, 이미지가 삽입 된 HTML 페이지)를 파악할 수있는 확실한 방법은 없습니다.

원하는 것은 특정 사람 만 이미지에 액세스하도록 허용하는 것입니다. 두 가지 방법이 있습니다 그 :

  • 필터가이 웹 서버 경우
  • 인증 된 세션/쿠키/인증 헤더를 요구, 즉 암호 이미지

을 보호 알려진 경우 IP 주소를 요청하여 (사실상 모든 서버가 IP로 요청을 필터링 할 수 있음) 이러한 검사를 지원하기 때문에 스크립팅이 필요 없습니다. 패스워드 인증을 위해서는 정확하게 작동하는 방법에 따라 스크립팅을 사용해야 할 수도 있습니다.

(고객 측) 자바 스크립트는 전혀 사용되지 않습니다.

관련 문제