PHP: verifikasi command file

Topik sebelumnya Topik selanjutnya Go down

PHP: verifikasi command file

Post  Boy21 on October 27th 2008, 3:13 pm

Verifikasi Data (Hapus file)
---------------------------------

ini adalah pegetahuan dasar mengenai masalah security bagi php coder yaitu jangan percaya semua data yang diinputkan user (sekalipun itu admin) sebelum kau memverifikasi data tersebut. langsung menjalankan data yang diterima dari $_GET, $_POST dan $_COOKIE adalah salah satu perbuatan bodoh (sumpah ni bukan kata gue).

contoh:
jika anda mempuyai script untuk menghapus file pada folder "gambar"

<?php
if (isset($_GET['hapusgambar'])) {
$dir = "./gambar/";
$file = $dir . $_GET['hapusgambar'];
unlink($file);
}
?>

masalah akan muncul jika ada yang merequest url

www.mysite.id/admin.php?hapusgambar=../index.php

maka bisa dipastikan file index.php anda akan terhapus dan struktur website anda pun terbuka utnuk dilihat siapapun. jadi anda harus punya kontrol mana file yang boleh dihapus dan tidak boleh dihapus.

cara memperbaikinya?
anda bisa mengikuti rekomendasi Regin Gaarsmand (http://www.sourcerally.net/regin/8-The-PHP-coder's-top-10-mistakes-and-problems.htm) dengan memverifikasi input terlebih dahulu. jika kita sesuaikan maka seperti ini

<?php
if (isset($_GET['hapusgambar'])) {
/* memasukan file yang boleh dihapus kedalam array */
$allowedFiles = array('file1.jpg','file2.jpg','file3.gif');

/* memeriksa apakah input dari user termasuk yang boleh dihapus */
if(in_array((string)$_GET['hapusgambar'],$allowedFiles)) {
$dir = "./gambar/";
$file = $dir . $_GET['hapusgambar'];
unlink($file);
}
else{
exit('not allowed');
}
}
?>

masalah kembali muncul, bagaimana jika file yang yang ingin di hapus itu dinamis artinya selalu berubah-ubah seperti file di dalam folder gambar. tidak mungkin setiap saat anda mengedit source code hanya untuk mengganti array file.

maka sebagai gantinya anda bisa menggunakan script seperti ini

<?php
if (isset($_GET['hapus'])) {
$fileuser = $_GET['hapus'];
$retVal = array ();

/* buka direktori gambar */
$handle = opendir("./gambar/");
while ($file = readdir($handle)) {
/* memasukan nama file kedalam array */
$retVal[count($retVal)] = $file;
}

/* tutup dan urutkan data */
closedir($handle);
sort($retVal);

/* check apakah file yang ingin dihapus ada didirektori tersebut */
if(in_array($fileuser,$retVal)) {
unlink($fileuser);
/* jika file tidak terdapat di folder gambar, maka tampilkan pesan */
} else {
exit('tidak di ijinkan');
}
}
?>

Happy coding....
By Boy21 a.k.a S-Elf
avatar
Boy21
Webmaster
Webmaster

Jumlah posting : 34
Lokasi : Indramayu
Registration date : 12.10.08

Lihat profil user http://boy21world.blogspot.com

Kembali Ke Atas Go down

Topik sebelumnya Topik selanjutnya Kembali Ke Atas

- Similar topics

 
Permissions in this forum:
Anda tidak dapat menjawab topik