Posted by on 09/08/2017

Hai bro, udah lama nih gak berbagi maklum sibuk belajar hehe. Kali ini kita mau berbagi gimana sih caranya membuat file upload php dengan filter yang aman agar tidak dapat dihack oleh orang yang tidak bertanggung jawab? Nah ini dia jawabannya.

Membuat File Upload PHP Dengan Filter Super Aman

Kenapa sih file upload itu perlu adanya filter yang super canggih keamannya? Gak mau kan seseorang tiba-tiba iseng aja ngupload file ternyata file itu virus atau backdoor yang sering digunakan hacker untuk mendapatkan akses ke web kita? Nah maka dari itu filterisasi ini lah yang bekerja untuk melakukan penyaringan data dari luar yang akan dimasukkan ke dalam website kita.

Langsung saja ini dia kode File Upload PHP dengan filter super aman oleh Unsada Coder.

<?php
$msg = '';
if (isset($_POST['upload'])) {
$file_name  = $_FILES['image']['name'];
$file_size  = $_FILES['image']['size'];
$file_tmp  = $_FILES['image']['tmp_name'];
$file_type  = $_FILES['image']['type'];
$exploded  = explode('.', $file_name);
$file_ext  = strtolower(end($exploded));
$allow_ext  = array('jpeg', 'jpg', 'png');
$allow_type = "#^(image/)[^sn<]+$#i";
$folder  = "images/";

// Memastikan dengan melihat tipe filenya
if(!preg_match($allow_type, $file_type)){
$msg = "Hanya Gambar Yang Bisa Diupload";
}

// Memastikan dengan melihat ekstensi filenya
elseif (!in_array($file_ext, $allow_ext)) {
$msg = "Ekstensi Tidak Diterima";
}

// Memastikan bahwa yg diupload benar-benar gambar
elseif (!getimagesize($file_tmp)) {
$msg = "Gambar Tidak Valid";
}

// Hanya gambar berukuran kurang dari 1 MB yang diperbolehkan
elseif ($file_size > 1048576) {
$msg = 'Gambar Tidak Boleh Lebih Dari 1MB';
}

else {
// Proses upload namun sebelumnya nama dan tipe file dirubah
$newname = substr(sha1(mt_rand(0, 16)), 0, 16) .'.jpg';
if (move_uploaded_file($file_tmp, $folder . $newname)) {
$msg = "Sukses Upload Gambar";
} else {
$msg = "Gagal Upload Gambar";
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Upload Gambar</title>
</head>
<body>
<?=$msg;?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="image">
<input type="submit" name="upload" value="Upload">
</form>
* jpeg, jpg, png yang dapat diupload
</body>
</html>

Penjelasan

Kode berikut merupakan proses analisis terhadap file yang diupload. Ditentukan nama, ukuran, tipe file dan lain sebagainya ditampung pada masing-masing variable. Sedangkan var $allow_ext dan $allow_type digunakan untuk proses filter nantinya.

$file_name  = $_FILES['image']['name'];
$file_size  = $_FILES['image']['size'];
$file_tmp   = $_FILES['image']['tmp_name'];
$file_type  = $_FILES['image']['type'];
$exploded   = explode('.', $file_name);
$file_ext   = strtolower(end($exploded));
$allow_ext  = array('jpeg', 'jpg', 'png');
$allow_type = "#^(image/)[^sn<]+$#i";
$folder  = "images/";

Kode berikut merupakan proses filter dimana tipe file sebagai dasar pengecekan apakah file yang diupload adalah gambar atau bukan dilihat dari tipe filenya.

// Memastikan dengan melihat tipe filenya
if(!preg_match($allow_type, $file_type)){
$msg = "Hanya Gambar Yang Bisa Diupload";
}

Jika tipe filenya adalah gambar, selanjutnya adalah melakukan pengecekan terhadap ekstensi filenya. Karena tipe file dapat dimanipulasi walau begitu ekstensi tetap harus sesuai dengan apa yang kita mau.

// Memastikan dengan melihat ekstensi filenya
elseif (!in_array($file_ext, $allow_ext)) {
$msg = "Ekstensi Tidak Diterima";
}

Selanjutnya yaitu memastikan bahwa file yang diupload adalah sebenar-benarnya gambar dengan mengecek bahwa file tersebut memiliki ukuran panjang dan lebar karena itu merupakan ciri terhadap gambar.

// Memastikan bahwa yg diupload benar-benar gambar
elseif (!getimagesize($file_tmp)) {
$msg = "Gambar Tidak Valid";
}

Kalo yang ini hanya filter ukuran saja, takutnya ada yang upload dengan ukuran besar tapi storage tidak memungkinkan kan gak enak juga.

// Hanya gambar berukuran kurang dari 1 MB yang diperbolehkan
elseif ($file_size > 1048576) {
$msg = 'Gambar Tidak Boleh Lebih Dari 1MB';
}

Nah kalo filter di atas masih bisa dibypass juga, entah mungkin hackernya dewa. Apapun filenya jika ingin masuk maka nama dan ekstensi akan dirubah.

else {
// Proses upload namun sebelumnya nama dan tipe file dirubah
$newname = substr(sha1(mt_rand(0, 16)), 0, 16) .'.jpg';
if (move_uploaded_file($file_tmp, $folder . $newname)) {
$msg = "Sukses Upload Gambar";
} else {
$msg = "Gagal Upload Gambar";
}
}

Oke mungkin itu saja, atau ada yang mau menambahkan silahkan komentar dan beri tanggapan yang baik-baik aja. Perlu kita ketahui, bahwa tidak ada keamanan yang benar-benar aman.

Posted in: Coding, Security, Tutorial

Comments

Be the first to comment.

Leave a Reply


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*