• 13-09-2012, 10:00:57
    #1
    Resim upload yaptırıyorum, ve güvenlik için bu fonksiyonu buldum. Fakat benim kodlarımla nasıl kullanacağımı anlayamadım. Fonksiyondan çıkan değer mi kullanılıcak, yoksa benim değer fonksiyon tarafından süzülücek mi?

    Benim kodlarım:

        $kaynak         = $_FILES["file"]["tmp_name"];
        $resim          = $_FILES["file"]["name"];
        $rtipi         = $_FILES["file"]["type"];
        $rboyut         = $_FILES["file"]["size"];
        $ruzanti     = substr($resim, -4);
        $yeniad         = substr(uniqid(md5(rand())), 0,21);
        $yeniresim      = $yeniad.$ruzanti;
        $hedef          = "resimler/";
    	$maxboyut = "100000";
    Bundan sonrası boyut yüksekse, uzantı jpg,gif,png değilse, resim seçilmediyse vs. verilecek hatalar.

    Fonksiyon:

     # Resim güvenlik için, $_FILES ile gelen resim'i bu fonksiyondan geçirin geriye Boolean bir değer döner
     # Resim'in bir hack girişimi olup olmadığını kontrol eder.
     function resim_hack($resim)
     {
     global $uzanti;
     
     $type = file_extension($resim);
     if(!in_array($type, $uzanti))
     return false;
     
     $data = '';
     if($data = @file_get_contents($resim) === FALSE)
     if($data = @file($resim) === FALSE)
     if($data2 = @fopen($resim, "r") === FALSE)
     {
     $data = fread($data2, 1024);
     fclose($data2);
     }
     if(trim( $data ) == '')
     return true;
    if(!preg_match("#<html|<head|<script|<style|<body|<form|<input|<iframe|<object|<embed#si", $data))
     return false;
     return true;
     }
  • 13-09-2012, 13:48:21
    #2
    Bir bilen yokmu?
  • 13-09-2012, 13:52:43
    #3
    Üyeliği durduruldu
    $resim = resim_hack(resimismi.uzantısı); şeklinde kullanıcaksın
  • 13-09-2012, 14:24:53
    #4
    AdultMedya adlı üyeden alıntı: mesajı görüntüle
    $resim = resim_hack(resimismi.uzantısı); şeklinde kullanıcaksın
    Bendeki kodda o zaman

    $new = resim_hack($yeniresim);
    şeklinde oluyor. Yani mysqlye yazdırırken $yeniresim değilde fonksiyonun kullanıldığı $new'i kullanıcam. Doğru anladım sanırım, değilmi?
  • 13-09-2012, 14:43:11
    #5
    Üyeliği durduruldu
    evet dogru anlamışsınız
  • 13-09-2012, 14:53:06
    #6
    Sanırım fonksiyon hatalı. Önce file_extension(); fonksiyonundan hata aldım. Sonra biraz araştırınca fonksiyonu buldum ve ekledim:

    function file_extension($resim)
    {
        return substr(strrchr($resim, '.'), 1);
    }
    Sonra resim yüklerken, şu satırın hatalı olduğu ve Wrong data ... gibi bir hatası olduğuyla karşılaştım. Sanırım dosya tipini tam alamıyor.

    if(!in_array($type, $uzanti))
    Tek yapmak istediğim resim yüklerken shell atılmasına engel olmak Baya zor oldu..
  • 13-09-2012, 15:16:18
    #7
    O şekilde kullanmamanız gerekiyor zaten fonksiyonu.
    $new = resim_hack($yeniresim);
    derseniz yanlış yaparsınız çünkü orada true false değer geliyor. resim değil yani.
    if(resim_hack($yeniresim)==false) die ('güvensiz dosya yüklemeye çalışuıyorsun');
    şeklinde olacak.

    resim içerisinde zararlı kod olabilir ama tür değişiminde mutlaka kaybolur. Siz dosyanın türü ne olursa olsun bir defalığına değiştirin yeterli olur kodların temizlenmesine. JPG ise tekrar JPG yapın önemli değil, yine temizler zararlı kodları.
  • 13-09-2012, 15:26:30
    #8
    Seyranli adlı üyeden alıntı: mesajı görüntüle
    O şekilde kullanmamanız gerekiyor zaten fonksiyonu.
    $new = resim_hack($yeniresim);
    derseniz yanlış yaparsınız çünkü orada true false değer geliyor. resim değil yani.
    if(resim_hack($yeniresim)==false) die ('güvensiz dosya yüklemeye çalışuıyorsun');
    şeklinde olacak.

    resim içerisinde zararlı kod olabilir ama tür değişiminde mutlaka kaybolur. Siz dosyanın türü ne olursa olsun bir defalığına değiştirin yeterli olur kodların temizlenmesine. JPG ise tekrar JPG yapın önemli değil, yine temizler zararlı kodları.
    Warning: in_array() [function.in-array]: Wrong datatype for second argument in

    hatası alıyorum bu sefer.

    JPG yapın dediniz, böyle birşey işe yarar mı peki?

        $resim          = $_FILES["file"]["name"];
        $resim2    = imagecreatefromjpeg("$resim");
  • 13-09-2012, 15:31:14
    #9
    O şekilde aldığı temizler tabi ama onu kaydetmeniz gerekiyor. move_uploaded_file fonksiyonu kullanıyorsunuz sanırım, onu kullanmayı yüklenen dosyada tür değişimi yapıp kendiniz fwrite ile kaydedin.