Cara Membuat Form Upload Gambar / File Yang aman

Membuat Form Upload yang aman adalah salah satu tugas yang harus di ketahui oleh semua programer .. Karna pada bagian form upload ini mempunyai celah vulnerebelitas yang cukup tinggi dan sangat rentan untuk di serang oleh para hacker yang jahil contoh: <a href='http://www.paulosyibelo.com/2015/03/exploiting-php-upload-forms-with-cve.html'>http://www.paulosyibelo.com/2015/03/exploiting-php-upload-forms-with-cve.html</a> ,. jadi klo kita tidak mengamankan Form upload ini ya siap" aja klau website anda akan menjadi sasaran empuk oleh para hacker :D xixixixi..

Nah maka dari itu disini ane mau berbagi tips dan trik untuk mengamankan form upload dari serangan hacker , Oke langsung aja ya ,. Dibawah ini adalah Beberapa cara bagaimana mengamankan form upload tersebut :

1.Menggunakan .Htaccess :

Cara pertama mengamankan bentuk file upload, adalah untuk melindungi folder di mana file itu di upload menggunakan file .htaccess. Mksudnya adalah untuk membatasi eksekusi file naskah dalam folder ini. Sebuah file .htaccess biasanya berisi kode di bawah ini:

AddHandler cgi-script php .php3 .php4 .phtml .pl py .jsp Asp htm .shtml sh cgi
Pilihan -ExecCGI

Kode Di atas adalah Meruupakan daftar hitam, yang dengan sendirinya Akan memblokir File" yang Bereksistensi Diatas . NB: Namun Kadang metode ini kurang aman juga Karena Jika Hacker mengetahaui cara membypass file htaccess ini akan berbahaya karena si hacker dapat dengan mudah mengganti file .htaccess dengan versinya sendiri . Dan Ini akan memungkinkan dia untuk menjalankan skrip tertentu yang dapat membantu dia berkompromi Dengan server.

2. Menggunakan PHP ( Recomended )

Nah Cara yang kedua ini biasanya Sering saya gunakan untuk mengamankan form upload karna PHP ini sendiri yang akan memeriksa apakah eksistensi tersebut di ijinkan msuk ke server ,, Contoh scriptnya Di bawah ini

// Form Html Nya
<form action ="upload_file.php" metode="post" enctype="multipart/form-data">
<label for="file"> Filename: </label>
<input type="file" name="gambar" id="gambar" />
<br />
<input type="submit" name="upload" value="Submit" />
</form>
//

<?php
if(isset($_POST['upload'])) {
    date_default_timezone_set('Asia/Jakarta');
    $name        = $_POST['gambar'];
    $time        = time();
    $nama_gambar = $_FILES['gambar'] ['name']; // Nama Gambar
    $size        = $_FILES['gambar'] ['size'];// Size Gambar
    $error       = $_FILES['gambar'] ['error'];
    $tipe_video  = $_FILES['gambar'] ['type']; //tipe gambar untuk filter
    $folder      = "uploads/"; //folder tujuan upload
    $valid       = array('jpg','png','gif','jpeg'); //Format File yang di ijinkan Masuk ke server

    if(strlen($nama_gambar))

       {

         // Perintah untuk mengecek format gambar

         list($txt, $ext) = explode(".", $nama_gambar);

         if(in_array($ext,$valid))

         {

           // Perintah untuk mengecek size file gambar

           if($size<500000)

           {

             // Perintah untuk mengupload gambar dan memberi nama baru

             $gambarnya = time().substr(str_replace(" ", "_", $txt), 5).".".$ext;
             $gmbr  = $folder.$gambarnya;

             $tmp = $_FILES['gambar']['tmp_name'];

             if(move_uploaded_file($tmp, $folder.$gambarnya))

             {
              $mysqli->query("INSERT INTO gallery_gambar(Nama_Gambar`, `DESC_GAMBAR`, `gambar`) VALUES ('$name', '$desc', '$gmbr') ");
              echo '<script>
                  alert("gambar Berhasil di upload");
               </script>';

             }
                else{ // Jika Gambar Gagal Di upload
            echo '<script>
                  alert("gambar Gagal di upload");
               </script>';
            }

           }
           else{ // Jika Gambar melebihi size
           echo '<script>
                  alert("gambar Terlalu Besar, Max 5MB");
               </script>';
             }

         }

         else{ // Jika File Gambar Yang di Upload tidak sesuai eksistensi yang sudah di tetapkan
            echo '<script>
                  alert("Format Gambar Tidak valid , Format Gambar Harus (JPG, Jpeg, gif, png) ");
               </script>';
             }

       }

       else{ // Jika Gambar belum di pilih
        echo '<script>
                  alert("Gambar Belum Di Pilih , Harap Memilih Gambar Dahulu");
               </script>';
          }

       exit;

     }
?>

Nah Demikian Lah Cara Mengamankan Form upload Yang aman !! Jika ada yang kurang mengeri bisa komentar langsung di bawah ya .. Thanks CMIIW ^_^

avatar chelvin
@chelvin

36 Kontribusi 18 Poin

Diperbarui 3 tahun yang lalu

8 Jawaban:

oh ini sistem upload dengan daftar blacklist ya? maaf bukannya sok tahu, tapi setau saya script diatas masih vuln shell uploader. mengubah extensi file shell, misalkan yang diblacklist .php, siattacker mengetahui .php sudah masuk blacklist akhirnya merubah extensi dengan .php2 .php3 .php5 dll

avatar ganopek
@ganopek

2 Kontribusi 1 Poin

Dipost 7 tahun yang lalu

Kalau Yang Menggunakan .htaccess Masih ada kemungkinan iya , tapi klo yang menggunakan PHP sih sudah saya coba dahulu gan dan insyallah aman , Karna Kalau yg menggunakan PHP Dia melakukan vallidasi Terlebih dahulu sebelum memasukan datanya ke server , jadi kalau type file tersebut tidak sesuai dengan type file yg berada di dalam array maka server akan menolaknya .. Sebelumnya Terimakasih atas masukannya CMIIW^__^

avatar chelvin
@chelvin

36 Kontribusi 18 Poin

Dipost 7 tahun yang lalu

Mas saya ada kasus ini menghapus record berita yg ada gambarnya, di database recordnya terhapus tapi gambar di folder penampungan masih ada.

	function hapus_berita($id){
		$query = "DELETE FROM berita WHERE id=$id";
		return run($query);;
	}
avatar gravis
@gravis

23 Kontribusi 0 Poin

Dipost 7 tahun yang lalu

mas ini error kayak gini , apa salah script??

Warning: getimagesize(): Filename cannot be empty in /home/foodteco/public_html/f00d@dm1ntec0/modul/sub_kategori/aksi_subkategori.php on line 87
id_kategori = 1.
Data truncated for column 'baru' at row 1
avatar ulviaanik
@ulviaanik

1 Kontribusi 2 Poin

Dipost 7 tahun yang lalu

@garvis Kasih function unlink untuk ngehapus gambarnya di folder contoh :

function hapus_berita($id){
                $sql = $mysqli->query("SELECT column_gambar FROM berita WHERE id = '$id' ");
                $result = $sql->fetch_array();
 		$query = "DELETE FROM berita WHERE id=$id";
                unlink($fetch['column_gambar']);
		return run($query);;
	}

Semoga Membantu ,..

@ulviaanik Boleh liat script lengkapnya karna di script saya tidak memakai function get imagesize nya

avatar chelvin
@chelvin

36 Kontribusi 18 Poin

Dipost 7 tahun yang lalu

gan ko di baris $name = $_POST['gambar']; itu error Notice: Undefined index: gambar in ./../..

avatar farhanluthfan
@farhanluthfan

1 Kontribusi 0 Poin

Dipost 6 tahun yang lalu

tembus ini, dengan file inivirus.php.jpg wkwk

avatar dianarifr
@dianarifr

642 Kontribusi 316 Poin

Dipost 6 tahun yang lalu

<div class="attachment-gallery attachment-gallery--2"><figure data-trix-attachment="{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;filename&quot;:&quot;php2.JPG&quot;,&quot;filesize&quot;:35307,&quot;height&quot;:167,&quot;url&quot;:&quot;https://i.ibb.co/NtkypMQ/php2.jpg&quot;,&quot;width&quot;:798}" data-trix-content-type="image/jpeg" data-trix-attributes="{&quot;presentation&quot;:&quot;gallery&quot;}" class="attachment attachment--preview attachment--jpg"><img src="https://i.ibb.co/NtkypMQ/php2.jpg" width="798" height="167"><figcaption class="attachment__caption"><span class="attachment__name">php2.JPG</span></figcaption></figure><figure data-trix-attachment="{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;filename&quot;:&quot;php.JPG&quot;,&quot;filesize&quot;:25509,&quot;height&quot;:276,&quot;url&quot;:&quot;https://i.ibb.co/tQ2TpgS/php.jpg&quot;,&quot;width&quot;:693}" data-trix-content-type="image/jpeg" data-trix-attributes="{&quot;presentation&quot;:&quot;gallery&quot;}" class="attachment attachment--preview attachment--jpg"><img src="https://i.ibb.co/tQ2TpgS/php.jpg" width="693" height="276"><figcaption class="attachment__caption"><span class="attachment__name">php.JPG</span></figcaption></figure></div><div>brother mhn bantuannya.. knapa hasil dari coding saya tdk sesuai..<br>harusnya kan kalau saya upload gambar lebih dari 1 juta byte muncul pesan ukuran gambar terlalu besar . mhn bantuannya</div>

avatar eben2512
@eben2512

17 Kontribusi 4 Poin

Dipost 3 tahun yang lalu

Login untuk ikut Jawaban