19
Temmuz
2009

Bant Genişliği Hırsızlarına Hotlink Koruması

Wikipedia der ki:

Inline linking (also known as hotlinking, leeching, piggy-backing, direct linking, offsite image grabs and bandwidth theft) is the use of a linked object, often an image, from one site into a web page belonging to a second site. The second site is said to have an inline link to the site where the object is located.

Kısa ve Öz Meali:

Hotlinking, bir sitenin başka bir sitenin (genelde resim dosyası olan) içeriğini izinsiz kullanması (bant genişliği hırsızlığı yapması) anlamına gelir.

Basit bir örnek verecek olursak: Siz web sitenize bir fotoğraf (mesela Türk bayrağı) yüklersiniz. Bu fotoğrafın adresi (siteniz.com/resim.jpg) olur. Başka bir X sitesi de, içeriğine Türk bayrağı eklemek ister. Ancak sizin fotoğrafınızın bir kopyasını kendi sunusuna atmak yerine aşağıdaki kodu kullanarak, doğrudan sizin sununuzdan çeker:

<!-- ADAMIN SİTESİNİN ADRESİNİN hirsiz.com OLDUĞUNU VARSAYARSAK -->
<img src="http://www.ubenzer.com/deepo/hotlink/hotlink.png" alt="Bayrak" />

Bunun size zararı nedir?

Bandwidth (ya da bant genişliği, BW), web sitenizin yayınlanması için anlaşma yaptığınız şirketin size (genelde) bir aylık süre zarfı içerisinde yapabileceğiniz en çok veri aktarım boyutu için koyduğu sınırdır. Sözgelimi, sizin bant genişliğiniz 500MB olsun. Web sitenizin her sayfasının 0.1MB (100KB) olduğunu varsayarsak, bir ayda en fazla 50000 sayfa görüntülenebilir. Daha sonra siteniz ay bitene kadar kapalı kalacaktır.

Başka birinin sizin alanınızdaki bir dosyayı sömürmesi de size bu noktada zararlıdır. Adam sizin kendi sunucunuza attığınız karikatürleri bir foruma gönderiyor olabilir. Forumda bu resimlerin her yüklenişi size BW gideri olarak patlayacaktır… Biraz acemiyseniz bundan haberiniz bile olmayabilir.

Hırsızlığı nasıl tespit ederiz?

HTTP protokülünde referans (referrer) denilen bir olay vardır. Basitçe özetlersek, HTTP protokolü ile bir istek yapıldığında, istekle beraber bir referans gönderilebilir. Referans “içinde bulunulan son sayfa” olarak açıklanabilir. Örneğin Facebook’ta paylaşılan bir bağlantınıza birisi tıkladığında HTTP Referrer kullanıcının Facebook’ta o anda bulunduğu sayfanın tam adresi olacaktır. Bir HTML belgesinin içindeki bir resim (img tagı) yüklenecekse, tarayıcı referrer olarak sayfanın adresini gönderecektir.

HTTP Referrer tarayıcıya bağlıdır ve çeşitli eklentilerle gönderilmemesi sağlanabilir. Eğer bir sitenin adresini adres çubuğuna elle yazarak girerseniz de HTTP referans bilgisi göndermemiş olursunuz.

Bir dosya, sizin içeriğinizi ve bant genişliğinizi sömüren sitede açılmaya çalışıldığında referans olarak bu sitenin adresi gelecektir. Böylece hırsızlığı tespit edebilirsiniz.

Nasıl çözülür?

HTTP Referrer bilgisini kontrol edebileceğiniz her yolla. Ama en basiti (linux ortamında) .htaccess dosyası ile. Sitenizin kök klasörüne aşağıdaki bilgileri içeren bir .htaccess dosyası oluşturursanız JPG, JPEG, PNG, GIF ve BMP formatındaki dış referanslar sizin istediğiniz bir dosyaya yönlenecektir.

Bu kod parçası mod_rewrite‘nin açık olmasını gerektirmektedir ki, açık değilse ve siz o hosting firmasını seçtiyseniz kendinizi camdan atabilirsiniz. Yok eğer sunucunun sahibi benim diyorsanız httpd.conf dosyasında gerekli oynamaları yapıp sunucuyu yeniden başlatmalısınız.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# BEGIN Hotlink Koruması
 
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/deepo/hotlink
# Hotlink resimlerinin olduğu dizini korumasız yapmalıyız ki, sonsuz dönüye girmeyelim.
RewriteRule ^.*$ - [L]
 
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?ubenzer\.com [NC]
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?facebook\.com [NC]
RewriteCond %{HTTP_REFERER} !^https://(.+\.)?facebook\.com [NC]
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?google\.com [NC]
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?google\.com\.tr [NC]
# Yukarıdaki sitelerden biri referans olarak gelirse engelleme mekanizması çalışmaz. Kendi sitemizi
# bu alana eklemek ÖNEMLİDİR! Yoksa kendi sitemize de hırsız muamelesi uygularız.
# Facebook ve Google tarzı sitelerde de ön izlemelerin çalışması için yine mekanizmayı çalıştırmamak iyidir.
 
RewriteRule .*\.(jpg|jpeg|gif|png|bmp|JPG|JPEG|GIF|PNG|BMP)$ http://www.ubenzer.com/deepo/hotlink/hotlink.$1 [L]
# Her formatı ayrı ayrı ele almak gerekir. Hırsız PNG istediğinde siz JPG biçimi gönderirseniz her tarayıcı bunu doğru yorumlayamaz.
</IfModule>
 
# END Hotlink Koruması

Dosya iyi hoş da, bir anlatıversen?

Anlatalım efendim.

Öncelikle hırsızların istediği resim yerine görünecek resimlerimizi hazırlayarak jpg, gif, png ve bmp formatlarında kaydediyoruz. Daha sonra büyük-küçük harf sorunlarını engellemek için uzantıların büyük harflilerini de kaydediyoruz. (Linux sistemlerde a.JPG ile a.jpg farklı dosya olarak kabul edilir.) Kısaca aşağıdaki dosyaları hazırlıyoruz:

  • hotlink.GIF
  • hotlink.gif
  • hotlink.JPG
  • hotlink.jpg
  • hotlink.JPEG
  • hotlink.jpeg
  • hotlink.BMP
  • hotlink.bmp
  • hotlink.PNG
  • hotlink.png

Eğer ilham gelmiyorsa, benim hotlink resmimden ilham alabilirsiniz. (Dikkat: Hareken çeken el içerir. :D )

İkinci adımda sitenizde “hotlink korumasız” bir dizin oluşturmalısınız. Hotlink durumunda görünecek resimleri de hotlink korumasına maruz bırakırsanız insanlık sizi affetmez. Benim örneğimde bu dizin www.ubenzer.com/deepo/hotlink/. Kendi .htaccess dosyanızı bunu ele alarak değiştirin.

Üçüncü adım olarak hotlink korumasından etkilenmeyecek siteleri ayarlamalısınız. Kendi sitenizi mutlaka yazın, yoksa kendi kendinize hırsız muamelesi yaparsınız. Verdiğim örnek .htaccess dosyası tüm subdomain ve adresleri kapsayacak örneklerdir. Mesela facebook.com adresini beyaz listeye alırsanız static.ak.facebook.com da alınır.

Google ve Facebook gibi, ön izlemenin önemli olabileceği siteleri beyaz listeye almanızı ve

9
RewriteCond %{HTTP_REFERER} !^$

satırını kullanmanızı tavsiye ederim. Bu satır hiçbir referans olmadığında (yani adres satırına doğrudan girildiğinde ya da sık kullanılanlardan çağrıldığında) ilgili resmin görünmesini sağlayacaktır. (Aşırı koruyucu olmamak lazım bir yerde…)

Son adımda, yaptıklarınızın keyfini çıkarmak kalıyor size. Bitti bu kadardı. =) Hırsızlardan artakalan bant genişliğinizi güle güle kullanın.

Güncelleme: .htaccess kodlarındaki ufak bir hatayı giderdim. Yorumuyla beni uyarak Selim’e teşekkürlerimi sunarım.

bu yazı 6.252 defa okundu

Site hoşunuza gitti mi? Belki arkadaşlarınızın da gider.

İstekli

Aaa Reklam

+ Yorumunuzu Ekleyin 12 yorum

  • FxDev 19 Temmuz 2009 01.59

    Karışık geldi be usta…

  • Selim 19 Temmuz 2009 10.37

    !^http://(. \.)?ubenzer.com$ [NC]
    burada ubenzer ile .com arasında ters slash işareti kullanılmamış ama diğer adreslerde ters slash işareti kullanmılmış. Bunun sebebi nedir ?
    ?facebook\.com/
    ?google\.com/

  • Umut 19 Temmuz 2009 15.59

    @Selim: İyi yakalamışsın, teşekkür ederim.

    Oradaki ters slash işareti .’nın regular expression olarak algılanmaması için bir kaçma (escape) işareti. Yani onu tüm satırlarda eklemeliyiz.

    Kodu güncelledim.

  • Mehmet 27 Mayıs 2010 01.41

    Merhaba Umut, bu konuda araştırma yaparken siteni buldum. Benim sorunum şu sitemde haberler ya da makaleleri facebookta paylaştığımda eklemiş olduğum resimler çıkmıyor sadece sol blokta bulunan firma logoları çıkıyor. Bu sorunu çözemedim, yukarıdaki kodlarıda denedim ama sonuç alamadım. Benm sitemdeki sorun ne olabilir? Host sağlayıcıma sordum hotlink koruması varmı diye bakalım nediyecekler. Seninde fikirini alayım istedim.

    İyi çalışmalar.

  • Umut 27 Mayıs 2010 03.34

    @Mehmet: Valla yazıda yazanlar dışında bir öneri getiremeyeceğim maalesef. Düşünüdm ama aklıma başka bir şey gelmedi.

    İyi geceler

  • [...] Kaynak: http://www.ubenzer.com/bant-genisligi-hirsizlarina-hotlink-korumasi/ [...]

  • phys 20 Kasım 2010 19.42

    yaralı bir yazı olmuş. sormak istediğim bişey var. örneğin wordpresste resimler wp-content/uploads/yıl/ay/ şeklinde oluşuyor. .htaccsess te resim klasörümüzü/wp-content/uploads olarak göstersek tüm alt klasörlerde dahil olurlmu. yoksa sadece uploads klasörümü geçerli olur. klasör içerisindeki tük klasörleride göstermek gerekirmi. Eğer öyleyse her ay htaccess aç klasör adı ekle. ölüm… bir çözümü varsa biligilendirir seiniz sevinirim.

    • Umut 20 Kasım 2010 20.35

      .htaccess dosyaların etki alanı şu şekilde:

      1. Eğer bir klasörün içinde .htaccess varsa o etkilidir.
      2. Eğer bir klasörde .htaccess yoksa ama üst klasörlerinden birinde bir .htaccess dosyası varsa o etkilidir.
      (bu muhtemelen daha ayrıntılıdır ama tam uzmanı değilim)

      Bu yüzden en üst klasöre koyulacak bir.htacess yeterli olacaktır. Benim wordpress'im için bu, public_html'e denk geliyor.

      Buraya engelleme kodunu yazınca, değil sadece uploads, wp-includes'in içindeki resimler bile korumaya alınıyor. Tek bir exception/ayrılcalık tanımamız gerekiyor, o da hotlink resimlerinin olduğu klasör ki, hotlink resimlerini de hotlinkten korumayalım. Bu kod parçası da yazıda var zaten.

      Sonuç olarak, en tepeye bir tane konulsa yeterlidir, tek tek gerek yok. :)

      • phys 20 Kasım 2010 22.16

        Öncelikle mesajıma cevap verdiğiniz için teşekkür ederim. Sorunu yardımınızla çözdüm.
        Ben buradaki adresi

        RewriteCond %{REQUEST_URI} ^/deepo/hotlink

        engellenecek klasör olarak anladım. hotlinklerde gösterilecek resimleride buraya atmışım. Yani korumak istediğim resimlerin bulunduğu alana. Dolayısı ile hem korumak isterken hemde izin vermiş gibi bişey oldum sanırım. şimdi uploads klasörünün içine hotlink diye bi klasör açarak adresi

        RewriteCond %{REQUEST_URI} ^/wp-content/uploads/hotlink

        olarak değiştirince sorun çözüldü. Aynı problemli yaşıyanlar olursa diye değinmek istedim yaşadığım probleme.

        Çok teşekkürler

  • barış özkan 31 Mayıs 2011 13.24

    Umut ber merhaba,

    Öncelikle bu detaylı anlatımınız için teşekkür ederim. Resimlerimi tüm sitelerde değilde sadece belirlediğimiz sitelerde görünmemesi için ne yapabiliriz?

    Örneğin xxx.com yyy.com isimli iki sitede resimlerin görüntülenmesini engelleyebilir miyim?

    • Umut 31 Mayıs 2011 14.26

      Mümkün, sadece kodları biraz değiştirmeniz gerekiyor. Whitelist kavramından blackliste çevirmeniz lazım çalışma mantığını. Ama elimde böyle bir kod hazır yok, deneme yanılmalar ile bulmanız lazım malesef.

  • xnetwork 15 Ağustos 2011 00.30

    Bu durum çok oluyor. Zararı olduğu gibi ufakta olsa faydasıda oluyor. Genelde resmi çalan site aynı alanda faaliyet gösterilen bir site oluyor. Sizde alanınızla alakalı bir siteden backlink almış oluyorsunuz. Tabi bw ye aşırı yük bindirdiği durumlarda anlattığınız gibi önlem almak gerekir. Ama pek bir yükü yoksa bence bir şey yapmaya gerek yok.

Yorumunuzu Bırakın

Bu yazıya gönderilen yeni yorumları e-posta aracılığıyla bana bildir
Yeni gönderilenleri yorum yapmadan takip etmek için tıklayınız.

Yorumunuz başarıyla alındı. Onaylandıktan sonra yayımlanacaktır. Teşekkürler.

Twitler yükleniyor... 5 saniye sonra

Bıdı bıdı bıdı bıdı dıdı dıdı dudu dudu hıdı hıdı hödü hödü yüklüyoruz öhüm öhüm bıdı bıdı vs vs... 6 nanosaniye önce

Yüklenmenin geç olmasının sebebi ben değilim, Twitter API'sinin yavaş olması. Gudu gudu hıdı hödö büdü büdü... 25697 asır önce

Ha tabi bunları okumuşsan, bu sitenin çok gizli bir özelliğini bulmuşsun demektir. ;) Tebrikler. Bu "sürpiz yumurta"yı bulduğunu bana da haber verir misin? Tıkla! 6 dinazor önce

Geçen Yıllarda Bu Hafta

2011

İzmir Metro’da İstasyon Şefi Olmak

İzmir Metro’da İstasyon Şefi Olmak

Geçen ay İzmir Metrosu Üçyol İstasyon Şefi Sayın Özlen Orant ...

Sunum Yaparken Ekranı Büyültmek

Sunum Yaparken Ekranı Büyültmek

Projektörle insanlara bir şeyler gösterirken, özellikle de benim gibi kaynak ...

Tarayıcınızdan Sesli Arama Yapın

Tarayıcınızdan Sesli Arama Yapın

Duymuşsunuzdur belki, yakın dönemde Google Türkçe dilinde de ses tanıma ...

2010

TTNET 3G Modemi Olan Birisi Aranıyor

TTNET 3G Modemi Olan Birisi Aranıyor

Kullananlar biliyordur, TTNET 3G Uçan İnternet paketi ile gelen modemin ...

FSX’te Bir Gün

FSX’te Bir Gün

Flight Simulator X, Microsoft tarafından geliştirilmiş bir uçuş simulatörü olup, ...

Uçan Sarışının Seyir Defteri

Uçan Sarışının Seyir Defteri

Antalya’ya gelişim müthiş bir eğlenceydi! Bir arka koltuğumda oturan güzide ...

Kıymık

Kıymık

Bazı ufak şeyler vardır çevremizden beklediğimiz… O kadar ufak ve ...

2009

Avea’dan “Kim Nerede”

Avea’dan “Kim Nerede”

Geçenlerde Avea’nın “Kim Nerede” isimli yeni bir hizmet vermeye başladığını ...

Yaratıcı Reklamlar

Yaratıcı Reklamlar

Eski elektronik postalarımı karıştırırken ilginç bir tane çıktı karşıma, paylaşmadan ......

Derleme Blogcu

Derleme Blogcu

Smashing Magazine 20 tane sitenin iç çamaşırını incelemiş, Lorem Ipsum ...

2008

Durgun Akıllı Öğrenciyle Sohbetler

Durgun Akıllı Öğrenciyle Sohbetler

ÖĞRENCİ: Merhaba hocam. Bir sorunum var. Bize öğrettiğiniz şeyleri denemek ...

Dönemiçi Notunuz

Dönemiçi Notunuz

Dün bir arkadaşım not ortalamamı sordu. Hesaplamaya üşendim. “Topla çarp ...

Do you speak Turkish?

Do you speak Turkish?

Pardon ben Türkiye’ye gelmiştim ama… Bir yanlışlık yok değil mi? ...

Son Yorumlar