Validasi File Upload di PHP
Validasi file upload sangat penting dilakukan karena adanya fitur mengunggah file ke web server adalah kegiatan yang cukup berbahaya. Ambil contoh pada sebuah web yang mengijinkan user untuk meng-upload foto/gambar bisa jadi dijadikan celah bagi para hacker untuk meletakan script berbahaya pada server.
Berbekal beberapa baris kode PHP kita sudah bisa membuat file upload sederhana. Namun hanya mengandalkan script sederhana tersebut tidak cukup untuk membuat file upload yang bisa diandalkan.
Untuk meminimalkan celah pada fitur file upload, dapat dilakukan dengan cara memverifikasi jenis file yang diupload. Kita tidak boleh mengandalkan informasi dari ekstensi file atau dari nilai $_FILES['berkas']['type']
atau dari mime type karena ketiga informasi tersebut bisa dipalsukan. Lebih baik menggunakan fungsi PHP exif_imagetype()
untuk memeriksa signature dari file yang diupload atau fungsi PHP getimagesize()
untuk memperoleh ukuran gambar.
$fileType = exif_imagetype($_FILES['myFile']['tmp_name']); $allowed = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG); if (!in_array($fileType, $allowed)) { echo "hanya diijinkan untuk meng-upload file gambar (gif, jpg, atau png)"; }
Namun tidak menutup kemungkinan, fungsi PHP di atas juga belum cukup untuk menghentikan hacker yang kelewat kreatif. Jadi perlu ditambahkan juga pemeriksaan ekstensi file, dan ubah paksa file .php
menjadi file .jpg
sehingga kode php yang mungkin lolos dari pemeriksaan pertama tidak bisa dieksekusi di server.
<form action="" method="post" enctype="multipart/form-data"> <input type="file" name="myFile"/> <input type="submit" value="Upload"/> </form> <?php define("UPLOAD_DIR", "images/"); if (!empty($_FILES['myFile']['name'])) { // verifikasi file gambar (GIF, JPEG, atau PNG) $fileType = exif_imagetype($_FILES['myFile']['tmp_name']); $allowed = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG); if (!in_array($fileType, $allowed)) { echo "hanya diijinkan untuk meng-upload file gambar (gif, jpg, atau png)"; } else{ $myFile = $_FILES['myFile']; // ubah paksa nama file yg mengandung selain huruf, angka, ".", "_", dan "-" dengan regex $name = preg_replace("/[^A-Z0-9._-]/i", "_", $myFile['name']); // periksa ekstensi file $parts = pathinfo($name); if (isset($parts['extension'])) { $ext = $parts['extension']; if ($ext !== 'jpg' && $ext !== 'gif' && $ext !== 'png') $ext = "jpg"; $name = $parts['filename'] . '.' . $ext; } else { // jika file tidak memiliki ekstensi maka berikan ekstensi .jpg $ext = 'jpg'; $name = $parts['filename'] . '.jpg'; } // simpan file move_uploaded_file($myFile['tmp_name'], UPLOAD_DIR . $name); } }
Sebagai tambahan, mungkin juga perlu untuk membatasi ukuran file yang diupload untuk melindungi website dari serangan yang mencoba mengganggu network traffic atau system load.
bisakah php digunakan untuk melakukan pengenalan citra? jadi fileuploader bisa dilengkapi lengkapi fitur untuk mensensor gambar/menolak gambar yang dianggap mengandung image yang disensor
bisa
caranya pake apa ya?
kurang tau masalah ini. pengolahan citra digital bukan bidang saya
Mas, imagetype_gif, imagetype_png itu kan buat gambar… kalo misalnya kita hanya ingin file bentuk rar… perintah nya apa ya?
Terima Kasih
Gan Kalo Selain Image (doc,zip,rar) G mana ya validasinya?
Klo pake mime type sering bobol 😀
mas, tutorialnya sudah saya ikutin dan berhasil. cuma gmn caranya ketika filter upload data di folder berhasil dan di databasenya juga ikut di filter.
← Previous Post
Next Post →
Cari Catatan Saya
Catatan Terbaru
Kategori
Blogroll
Arsip
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
© 2024 Sibudi </>. Theme: Ari by Elmastudio. Proudly powered by WordPress.