Türkiye'nin En Eski Webmaster Forumu İyinet'e Hoşgeldiniz!

Orjinal resimleri gizleme

Caesar

0
Onaylı Üye
Üye
Katılım
5 Haziran 2006
Mesajlar
1,894
Açılan Konu
83
Tepki puanı
7
Merhaba,

Bir çok arkadaşın sorunu olan kendi hostlarina yukledikleri resimleri baska yerde kullanilmasi ve bu yuzden bandwidth sorunu yaşaması.

Bu konuya kendi cabalarımda bir çözüm ürettim.

bir adet resim.php miz var bu resim.php hazir bir kutuphane idi fakat değiştirmelerim sonucu istedigimizi yapabiliyoruz.

resim.php
PHP:
<?php



$save_to_file = true;

$image_quality = 100;

$image_type = -1;

$max_x = 170;  //Maksimum width

$max_y = 200;  //Maksimum height

$thumbs_folder = ''; //Eğer resimlerinizi sabit bir klasorden cekmiyorsaniz boş bırakın







$to_name = '';



if (isset($_REQUEST['f'])) {

  $save_to_file = intval($_REQUEST['f']) == 1;

}



if (isset($_REQUEST['src'])) {

  $from_name = urldecode($_REQUEST['src']);
  $from_name = base64_decode($from_name);  
  $from_name = str_replace("+","=",$from_name);  

}

else {

  die("Source file name must be specified.");

}



if (isset($_REQUEST['dest'])) {

  $to_name = urldecode($_REQUEST['dest']);

}

else if ($save_to_file) {

  die("Thumbnail file name must be specified.");

}



if (isset($_REQUEST['q'])) {

  $image_quality = intval($_REQUEST['q']);

}



if (isset($_REQUEST['t'])) {

  $image_type = intval($_REQUEST['t']);

}



if (isset($_REQUEST['x'])) {

  $max_x = intval($_REQUEST['x']);

}



if (isset($_REQUEST['y'])) {

  $max_y = intval($_REQUEST['y']);

}





function SaveImage($type, $im, $filename, $quality, $to_file = true) {



  $res = lisanssız;



  // ImageGIF is not included into some GD2 releases, so it might not work

  // output png if gifs are not supported

  if(!function_exists('imagegif')) $type = 3;



  switch ($type) {

    case 1:

      if ($to_file) {

        $res = ImageGIF($im,$filename);

      }

      else {

        header("Content-type: image/gif");

        $res = ImageGIF($im);

      }

      break;

    case 2:

      if ($to_file) {

        $res = ImageJPEG($im,$filename,$quality);

      }

      else {

        header("Content-type: image/jpeg");

        $res = ImageJPEG($im,'',$quality);

      }

      break;

    case 3:

      if ($to_file) {

        $res = ImagePNG($im,$filename);

      }

      else {

        header("Content-type: image/png");

        $res = ImagePNG($im,'',$quality);

      }

      break;

  }



  return $res;



}



function ImageCreateFromType($type,$filename) {

 $im = lisanssız;

 switch ($type) {

   case 1:

     $im = ImageCreateFromGif($filename);

     break;

   case 2:

     $im = ImageCreateFromJpeg($filename);

     break;

   case 3:

     $im = ImageCreateFromPNG($filename);

     break;

  }

  return $im;

}



// generate thumb from image and save it

function GenerateThumbFile($from_name, $to_name, $max_x, $max_y) {



  global $save_to_file, $image_type, $image_quality;



  // if src is URL then download file first

  $temp = false;

  if (substr($from_name,0,7) == 'http://') {

    $tmpfname = tempnam("tmp/", "TmP-");

    $temp = @fopen($tmpfname, "w");

    if ($temp) {

      @fwrite($temp, @file_get_contents($from_name)) or die("Cannot download image");

      @fclose($temp);

      $from_name = $tmpfname;

    }

    else {

      die("Cannot create temp file");

    }

  }



  // get source image size (width/height/type)

  // orig_img_type 1 = GIF, 2 = JPG, 3 = PNG

  list($orig_x, $orig_y, $orig_img_type, $img_sizes) = GetImageSize($from_name);



  // should we override thumb image type?

  $image_type = ($image_type != -1 ? $image_type : $orig_img_type);



  // check for allowed image types

  if ($orig_img_type < 1 or $orig_img_type > 3) die("Image type not supported");



  if ($orig_x > $max_x or $orig_y > $max_y) {



    // resize

    $per_x = $orig_x / $max_x;

    $per_y = $orig_y / $max_y;

    if ($per_y > $per_x) {

      $max_x = $orig_x / $per_y;

    }

    else {

      $max_y = $orig_y / $per_x;

    }



  }

  else {

    // keep original sizes, i.e. just copy

    if ($save_to_file) {

      @copy($from_name, $to_name);

    }

    else {

      switch ($image_type) {

        case 1:

            header("Content-type: image/gif");

            include($from_name);

          break;

        case 2:

            header("Content-type: image/jpeg");

            include($from_name);

          break;

        case 3:

            header("Content-type: image/png");

            include($from_name);

          break;

      }

    }

    return;

  }



  if ($image_type == 1) {

    // should use this function for gifs (gifs are palette images)

    $ni = imagecreate($max_x, $max_y);

  }

  else {

    // Create a new true color image

    $ni = ImageCreateTrueColor($max_x,$max_y);

  }



  // Fill image with white background (255,255,255)

  $white = imagecolorallocate($ni, 255, 255, 255);

  imagefilledrectangle( $ni, 0, 0, $max_x, $max_y, $white);

  // Create a new image from source file

  $im = ImageCreateFromType($orig_img_type,$from_name); 

  // Copy the palette from one image to another

  imagepalettecopy($ni,$im);

  // Copy and resize part of an image with resampling

  imagecopyresampled(

    $ni, $im,             // destination, source

    0, 0, 0, 0,           // dstX, dstY, srcX, srcY

    $max_x, $max_y,       // dstW, dstH

    $orig_x, $orig_y);    // srcW, srcH



  // save thumb file

  SaveImage($image_type, $ni, $to_name, $image_quality, $save_to_file);



  if($temp) {

    unlink($tmpfname); // this removes the file

  }

}





// generate

GenerateThumbFile($from_name, $thumbs_folder. $to_name, $max_x, $max_y);



?>

Şimdi gelelim asıl olaya.

Örneğin resim resimler/bilmemne.jpg şeklinde olsun. Doğal olarak bu web sitenizde http://www.deneme.com/resimler/bilmemne.jpg olarak gözükecek ve isteyen bu resmi kullanabilecek, sizin href'inizi vererek.

Biz şu şekilde yapacağız

PHP:
<?
$resim="resimler/bilmemne.jpg";
$sifrele=base64_encode($resim);
$sifrele=str_replace("=","+",$sifrele);
?>
<img src="resim.php?src=<?=$sifrele?>&x=75&y=75&f=0&t=2&q=80"/>
<?
# linkte verilen &y resmin height'u &x ise width'idir. buradan ayarlayabilirsiniz.
?>
Resim linki şu şekilde olacaktır. resim.php?src=dGh1bWJzLzIuanBn&x=75&y=75&f=0&t=2&q=80

Görüldüğü üzere resim linki : dGh1bWJzLzIuanBn şeklini almıştır. Oysaki gerçek adresimiz: resimler/bilmemne.jpg dir.

Bu şekilde resimlerinizi gizleyebilirsiniz.

Afiyet olsun...
 

theersin

0
Onaylı Üye
Üye
Katılım
2 Şubat 2006
Mesajlar
1,410
Açılan Konu
124
Tepki puanı
4
Konum
Pendik
gerçekten işe yarar teşekkürler :)
 

Caesar

0
Onaylı Üye
Üye
Katılım
5 Haziran 2006
Mesajlar
1,894
Açılan Konu
83
Tepki puanı
7
O adresteki hali thumb oluşturacağı için boyutu çok düşük olacaktır gerçek haline göre ayrıca Referer sorgusu ile sadece belirtilen web adresinde resim.php nin calişmasi sağlanabilir.

Yani dışarıya ekleseler bile sadece kendi hostunuzda çalışmış olur.
 

Caesar

0
Onaylı Üye
Üye
Katılım
5 Haziran 2006
Mesajlar
1,894
Açılan Konu
83
Tepki puanı
7
Yani resim.php nin en başına

PHP:
$site = $_SERVER["HTTP_REFERER"];

$site = explode("/", $site);

$site = $site[2];
if ($site!="www.domainim.com" or $site!="domainim.com") {
   die();
}
eklenerek hallolmuş olur.
 

theersin

0
Onaylı Üye
Üye
Katılım
2 Şubat 2006
Mesajlar
1,410
Açılan Konu
124
Tepki puanı
4
Konum
Pendik
peki birşey daha xxx.com sitesinin sitemden resim çekilmesine izin vermek istiyorum onu nasıl yapıcaz.
 

Caesar

0
Onaylı Üye
Üye
Katılım
5 Haziran 2006
Mesajlar
1,894
Açılan Konu
83
Tepki puanı
7
PHP:
$site = $_SERVER["HTTP_REFERER"];

$site = explode("/", $site);

$site = $site[2];
if ($site!="www.domainim.com" or $site!="domainim.com" or $site!="xxx.com" or $site!="www.xxx.com") {
   die();
}

resim.php nin ilk başına. burada domainim.com sizin siteniz xxx.com izin vermek istediğiniz sitedir.
 

Mywedding

1
Onaylı Üye
Üye
Katılım
26 Eylül 2006
Mesajlar
5,893
Açılan Konu
426
Tepki puanı
88
Konum
www.odatv.com
caesar , sen süpersin ya
index_actores_superman.jpg
:p
 

BabaPanter

0
Onaylı Üye
Üye
Katılım
15 Aralık 2005
Mesajlar
732
Açılan Konu
46
Tepki puanı
0
Cpanel'de de buna benzer bişey var sanırım.

Direkt Link Koruyucuları

Link koruyucu diğer websitelerinin sizin sitenizde bulunan dosyalara direkt linkler oluşturmalarını önler. İzin verilecek uzantılar dışındaki dosyalar diğer siteler tarafından direkt olarak erişilebilir olacaktır (örnek: html dosyaları). Buna güzel bir örnek, <img> sitenizde yer verdiğiniz bir fotoğraf olabilir. Bu fotoğrafa diğer sitelerden verilecek direkt linkler sizin izin verilen veri transfer miktarınızın istemsiz bir şekilde azalmasına ve zarar görmenize yol açacaktır. Direkt olarak erişimine izin vermek istediğiniz tüm sitelerin aşağıdaki listede yer aldığından emin olmalısınız. Sistem sizin kontrolünüzde olan tüm alanları otomatik olarak listeye ekleyecektir, fakat diğer istediğiniz siteleri siz eklemelisiniz.
 

alorak

0
Onaylı Üye
Üye
Katılım
14 Ekim 2005
Mesajlar
2,035
Açılan Konu
89
Tepki puanı
1
Konum
Ankara
Çözüm kolay ama bilmeyenler için engeller :) Çok iyi paylaşım..
 

sempaty

1
Onaylı Üye
Üye
Katılım
25 Şubat 2005
Mesajlar
3,824
Açılan Konu
87
Tepki puanı
20
Konum
hawaii. ama sanal tur.
bence her resim için php çalıştırmak pek iyi değil. htaccess yardımıyla yapılması daha sağlıklı gibi.

hotlinking i tamamen engellemek için
Kod:
RewriteCond %{HTTP_REFERER} !^http://(www\.)?siteniz.com [NC]
RewriteCond %{REQUEST_URI} !^/olmayanbisey.jpg$
RewriteRule .(gif|GIF|jpg|JPG)$ /yasak.jpg [NC,L]

veya bazı sitelere yasaklamak için
Kod:
RewriteCond %{HTTP_REFERER} ^http://(www\.)?yasakli.com [NC]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?hebele.com [NC]
RewriteCond %{REQUEST_URI} !^/olmayanbisey.jpg$
RewriteRule .(gif|GIF|jpg|JPG)$ /yasak.jpg [NC,L]

yasak.jpg dosyasına şöyle ilgi çekici bi resim koyabilirsiniz :p (imageshack.us sitesinin kurbağası gibi)
 
Üst