PHP Dosya Yükleme Temelleri
PHP, web uygulamalarında dosya yükleme işlemleri için yaygın olarak kullanılan bir dildir. Kullanıcıların dosyalarını sisteme yüklemesine izin veren uygulamalar, bazı güvenlik açıklarına neden olabilir. Bu sebeple, dosya yükleme işlemleri dikkatli bir şekilde yapılmalıdır. PHP 7.4 sürümü, dosya yükleme işlemlerinin güvenli bir şekilde gerçekleştirilmesi için çeşitli yöntemler ve teknikler sunmaktadır.
Dosya Yükleme Formu Oluşturma
Dosya yükleme işlemi, en az iki temel bileşenden oluşur: kullanıcı arayüzü ve sunucu tarafında yapılacak işleme dair kod. HTML formu kullanılarak dosya yükleme arayüzü oluşturulur. Formda, `enctype` niteliği `multipart/form-data` olarak ayarlanmalıdır. Bu ayar, formun dosya yüklemesini sağlamak için gereklidir. Temel bir form şu şekildedir:
“`html
“`
Dosya Yükleme İşlemi
PHP betiği, yüklenmiş dosyanın sunucuya kaydedilmesi için kullanılmalıdır. Kullanıcıdan alınan dosya, `$_FILES` süper global dizisi aracılığıyla elde edilebilir. Bu aşamada ilk adım, dosyanın yüklenip yüklenmediğini kontrol etmektir.
“`php
if ($_SERVER[“REQUEST_METHOD”] == “POST”) {
$target_dir = “uploads/”;
$target_file = $target_dir . basename($_FILES[“fileToUpload”][“name”]);
$uploadOk = 1;
}
“`
Dosya Türü Kontrolü
Her dosya yüklemesi öncesinde, dosya türünün kontrol edilmesi gerekmektedir. Bu işlem, yalnızca belirli türde dosyaların yüklenmesine izin vererek uygulamanın güvenliğini artırır. Dosya türü, `mime_content_type` veya `pathinfo` fonksiyonları aracılığıyla kontrol edilebilir.
“`php
$fileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
$allowed_types = array(“jpg”, “png”, “gif”, “pdf”);
if (!in_array($fileType, $allowed_types)) {
echo “Sorry, only JPG, PNG, GIF, & PDF files are allowed.”;
$uploadOk = 0;
}
“`
Dosya Boyutu Kontrolü
Yüklenebilecek dosyaların boyutunun da kontrol edilmesi, sunucunun kaynaklarını korumak için önemlidir. PHP.ini dosyasında belirlenmiş olan `upload_max_filesize` ve `post_max_size` değerleri, dosya yükleme işlemi sırasında göz önünde bulundurulmalıdır. Bunun yanı sıra, dosya boyutu kontrolü `$_FILES` dizisi aracılığıyla yapılabilir.
“`php
if ($_FILES[“fileToUpload”][“size”] > 5000000) { // 5MB
echo “Sorry, your file is too large.”;
$uploadOk = 0;
}
“`
Dosya Adını Güvenli Hale Getirme
Kötü niyetli kullanıcılar, yükledikleri dosyanın adını manipüle ederek zararlı yazılımları veya diğer tehditleri sisteme dahil edebilir. Bu nedenle, yüklenen dosyanın adının güvenli bir şekilde düzenlenmesi gerekmektedir. `uniqid()` veya `bin2hex(random_bytes())` gibi fonksiyonlar kullanılarak dosya adı güvenli hale getirilebilir.
“`php
$newFileName = uniqid(”, true) . ‘.’ . $fileType;
$target_file = $target_dir . $newFileName;
“`
Hedef Dizin İzinleri
Bir dosyanın başarılı bir şekilde yüklenebilmesi için, hedef dizinin yazma izinlerinin (write permissions) doğru şekilde ayarlandığından emin olunmalıdır. Sunucuda hedef dizin için gerekli izinler sağlanmalı ve yanlışlıkla yazılmasına veya silinmesine neden olabilecek izin ayarlarından kaçınılmalıdır.
Dosya Yükleme Sonrası İşlemler
Yüklenen dosyanın doğruluğu kontrol edildikten sonra, dosya `move_uploaded_file()` fonksiyonu ile hedef dizine taşınmalıdır. Bu işlem, dosyanın belirtilen dizine doğru bir şekilde kaydedilmesini sağlar.
“`php
if ($uploadOk === 1) {
if (move_uploaded_file($_FILES[“fileToUpload”][“tmp_name”], $target_file)) {
echo “The file “. htmlspecialchars( basename( $_FILES[“fileToUpload”][“name”])). ” has been uploaded.”;
} else {
echo “Sorry, there was an error uploading your file.”;
}
}
“`
Sonuç
Yukarıda belirtilen adımlar, PHP 7.4 ile dosya yükleme işlemlerinin güvenli bir şekilde gerçekleştirilmesini sağlamak için önemli teknikleri içermektedir. Dosya türü, boyut, isim düzenleme ve hedef dizin izinlerinin kontrolü, dosya yükleme sürecinin güvenliğini artırmak için kritik öneme sahiptir. Güvenli bir dosya yükleme sistemi oluşturmak, yalnızca kullanıcıların verilerini korumakla kalmaz, aynı zamanda sistemin genel güvenliğini de güçlendirir. Bu önlemlerin alınması, web uygulamaları için zararlı yazılımlara karşı koruma sağlar.


