내 사이트에서 리소스의 핫 링크 ( "이미지 도난"/ "대역폭 도난")를 방지하는 방법은 무엇입니까?


8

"궁극적 인"안티 핫 링크 .htaccess를 작성하려고합니다 ...

인터넷에서 많은 예제 / 튜토리얼 / 생성기 를 찾을 수 있지만 대부분이 잘못되었거나 불완전합니다 (또는 둘 다).

내가 찾고있는 기능은 다음과 같습니다.

  • HTTP_REFERER가 외부 사이트 인 경우 파일 확장자 목록에 대한 핫 링크를 차단해야합니다.
  • 현재 도메인 (duh)에 대한 .htaccess에서 코드를 해독하지 않고 핫 링크를 허용해야합니다.
    • 현재 도메인의 경우 http 및 https에서 작동해야합니다.
    • 현재 도메인의 경우 www가 있고 www가없는 상태에서 작동해야합니다.
  • 이 규칙에 예외 도메인을 추가 할 수 있어야합니다 (예 : Google 친구).이 도메인은 http 및 https에서 www와 함께 또는 www없이 또는 www없이 작동해야합니다.

이것이 내가 지금까지 달성 한 것입니다.

<IfModule mod_rewrite.c>

Options +FollowSymlinks
RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com/.*$ [NC]
RewriteRule \.(gif|jpe?g|png|zipx?)$ - [NC,F]

</IfModule>

내 질문 :

  1. mydomain.com.htaccess에서 하드 코딩을 피하는 방법은 무엇입니까? (이 .htaccess를 각 도메인마다 수정하지 않고도 모든 도메인에 배포 할 수 있다면 좋을 것입니다.)
  2. 내 RewriteRule에서 right gif|jpe?g|png|zipx?와 동일 gif|jpg|jpeg|png|zip|zipx합니까? (정규 표현식에서는 여전히 새롭습니다.)
  3. 내 .htaccess에 내가 모르는 나쁜 것이 있습니까?

# 1의 경우 다소 가능하다는 것을 알고 있습니다. 내가 찾은 가장 가까운 것은이 코드 조각으로 도메인을 하드 코딩하지 않고 URL에서 www를 제거합니다. 내 질문 # 1 에이 방법을 사용하는 방법이 있습니까?

RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteCond %{HTTPS}s/%1 ^(on(s)|offs)/(.+)
RewriteRule ^ http%2://%3%{REQUEST_URI} [L,R=301]

최신 정보:

일반 이미지 대신 워터 마크 이미지를 제공하는 솔루션을 알고 있습니다. 그러나 나는 이런 종류의 해결책을 찾고 있지 않습니다. 모든 종류의 이진 파일 (zip, exe, iso, jpg, png, gif ...)에서 작동 하는 보편적 인 솔루션 (403 오류)을 원합니다 .


IMHO Apache는 최소한 포함 옵션으로이 구성 파일을 제공해야합니다. 아파치 개발자가 당신이 그것을 추가 할 수 있다면 기꺼이 추가 할 것인지 궁금합니다.
Chris Nava

5
하지마 여기에 이유가 있습니다 -tomoconnor.eu/blogish/mod-rewrite-killing-social-media
Tom O'Connor

@Tom O'Connor 재미있는 독서와 나는 그것에 동의합니다. 그러나 필자의 경우 내 스크립트는 이미지 및 기타가 아닌 큰 이진 파일 (예 : zip, exe ...)에 사용됩니다. 그래서 나는 여전히 답을 얻어야 할 것입니다. 네 대역폭은 저렴하지만 500MB zip은 100KB jpg와 동일하지 않습니다.
AlexV

나는 대답을 더킹하지 않았다. 난 그냥 불평했다)
톰 오코너

답변:


9

무엇을 하든지 CPU 사이클을 낭비하고 있습니다 (레퍼러 사이트 (링크를 수행하는 사이트)가 권한을 부여했는지 여부를 결정하기 위해 요청 데이터를 일부 처리해야 함). 최소한 의 CPU주기
를 낭비하면서 대역폭을 절약하는 것이 유일한 방법 입니다.

있다 아파치 문서 도구의 몇 가지 예 당신이 원하는 무엇을 정확하게. 이 하나:

SetEnvIf Referer example\.com localreferer
<FilesMatch \.(jpg|png|gif)$>
Order deny,allow
Deny from all
Allow from env=localreferer
</FilesMatch>

가장 적용 가능한 것으로 보입니다 (mod_rewrite의 전체 가중치가 필요하지 않음).
추가 SetEnvIfAllow지시문을 사용 하여 유효한 리퍼러를 추가 할 수 있습니다 .


나쁘지는 않지만 htaccess에서 도메인 이름을 하드 코딩하지 않는 솔루션이 필요합니다 (제 질문을주의 깊게 읽으십시오).
AlexV

그런 다음 Oliver가 제안한 프로그래밍 방식의 솔루션이 필요합니다 (여전히 목록, 정규식 또는 허용 된 리퍼러의 다른 표현을 하드 코딩해야 함)
voretaq7

당신이 내 두 번째 코드 블록을 볼 필요는 없다. 당신은 그것을 할 수있는 것을 볼 수있다 ... 나는 단지 그것을 내 경우에 적응시켜야한다 ...
AlexV

두 번째 코드 블록에서 정리 논리를 사용하거나 %{HTTP_HOST}정규 표현식 구문 분석을 줄이려면 비슷한 마법을 사용 하여 URL 호스트를 규칙 세트에 삽입하면 동적 로컬 도메인을 광범위하게 구매해야하지만 여전히 열심히해야합니다. 구글과 같은 "좋은"외부 리퍼러 (리퍼러, 사용자 에이전트, IP 등)
voretaq7

3

참조자가 알 수없는 경우 (금지 된) 이미지를 매개 변수로 전달하는 Php 파일을 호출하고 Php 파일에 큰 빨간색으로 표시하는 규칙을 작성하는 것은 어떻습니까? "이 파일은 MYWEBSITE.COM에서 가져 왔습니다. 여기에 표시 할 공식 승인이 없습니다. "

당신의 질문에 관해서는, 당신의 규칙을 세계적으로 만드십시오. 내가 틀렸다면 수정하되, 어떤 호스트 보다 먼저 규칙을 선언 하면 모든 가상 호스트에 적용됩니다 ( "기본 규칙"의 종류).

또 다른 아이디어는 간단합니다. Php 파일 (여기서는 filter.php)로 리디렉션 하면 승인 된 웹 사이트를보고 모든 것이 정상이면 필요한 파일을 반환합니다.

RewriteRule /(.*)\.jpg$ /filter.php?im=$2\.jpg [QSA,L]

에서 filter.php단지 동적으로로드 같은 가상 호스트 또는 무언가의 목록 :

if (isset($_SERVER['HTTP_HOST'])) {
   if ((mb_ereg('thereferers\.I\.HATE\.com',HOST) !== false) ) {
       ... your code ...
   }
}

가능성은 있지만 (PHP를 사용하여) CPU를 낭비하고 싶지 않습니다. 나는 403s 만 봉사하고 싶습니다. 또한 PHP를 사용하면 모든 캐싱 문제를 관리해야하며 이는 매우 복잡 할 수 있습니다.
AlexV

1

Cloudflare가 도움이 될 수 있습니다. http://www.cloudflare.com

그러나 이것은 이미지에만 적용되지만 그 이후의 것으로 보입니다.

핫 링크 보호

오프 사이트 링크를 방지하기 위해 이미지에 대한 핫 링크 보호를 자동으로 활성화합니다. 영역 내에 있지 않고 비어 있지 않은 리퍼러는 액세스가 거부됩니다. 지원되는 파일 확장자는 gif, ico, jpg, jpeg 및 png입니다.

보호됨 : http://mydomain.com/images/pic.jpg 무시하려면 : http://mydomain.com/images/hotlink-ok/pic.jpg


0

질문 1:

RewriteEngine On
RewriteCond % {HTTP_REFERER}! ^ http : // (. +)? yoursite.com/ [NC]
RewriteCond % {HTTP_REFERER}! ^ $
RewriteRule. *. (jpe? g | gif | bmp | png) $- [에프]

질문 2 :

질문 3

나는 나의 것을 사용할 것이다


질문 1의 "yoursite.com"은 하드 코딩되어 있으므로 도움이되지 않습니다.
AlexV

@AlexV : 아닙니다. yoursite.com을 허용하려는 주소로 바꾸면 다른 추천인이 이미지를 다운로드하지 못합니다.
기원

그리고 하드 코딩하지 않고 어떻게 나 자신을 허용합니까?
AlexV

-1

아니면 CoralCDN 개미를 사용 하여 사람들이 그들의 마음의 내용에 핫 링크하도록 하시겠습니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.