sergin wrote:Dosyaları validate ederken inputu elde etmek için Input::file() veya Input::all() kullanmalısınız.
$file = Input::file('file');
$file değişkenimiz Symfony UploadedFile sınıfından bir nesnedir ve Validator::make($file, $rules); şeklinde geçilmesi hata verir. Çünkü make metodunun birinci parametresinin bir dizi olması gerekirken nesne geçmiş oluyorsunuz. Ya Sinan'ın dediği gibi Input::all() kullanmalısınız, ya da Input::file() kullanmalısınız:
$file = Input::file('file'); //bu nesne ile upload ile ilgili işleri yapabilirsiniz
$dosya = Input::file(); //PHP'nin $_FILES dizisini elde etmiş olduk. Validator::make metodunda bunu kullanabilirsiniz.
$rules= array('file' => 'mimes:jpg|max:500');
$v= Validator::make($dosya, $rules);
if ($v->fails()) {
return Response::json('error', 400);
}
...............
Teşekkür ederim Sergin,
Söylediğin şekilde denemiştim, çalışmıyor..Sanırım recursive array işi karmaşık yapıyor. Son olarak şu şekilde kullanıyorum:
$file = Input::file('file');
$ext=strtolower($file->guessExtension());
$size=$file->getSize();
$mime= strtolower($file->getMimeType());
if (($ext ==='png'OR $ext ==='gif') OR ($mime ==='image/png' OR $mime ==='image/gif') OR $size > 500000) {
return Response::json('Invalid image type or size', 400);
}
Bugün Symfony'nin Upload sınıfını incelerken dikkatimi çeken komutlar oldu.
guessExtension()
Bu komut dosya uzantısını tahmin ediyor...Kullanmak için php.ini den guesser aktif etmek gerek (extension php_fileinfo)
getClientExtension()
Bu da uzantıyı alıyor. Ama kullanıcı manipüle edebileceğinden güvenli değil..Örneğin uzantısı PNG olan bir dosyayı JPG yaptım, validasyonu geçti. Yani sistemi kandırmak kolay.
Şimdi bu durumda guessExtension çok işime yarıyor. Böyle kullanmak daha avantajlı değil mi?
NOT: Ben zaten upload klasöründe .htaccess ile herhangi bir kodun çalıştırılmasına önlem aldım. "Sunucu taraflı kontroller manipüle edilebilir, sadece .htaccess yeter" demelerine rağmen amaç saldırganın işini kolaylıştırmamak.