Strategi Mitigasi Path Traversal
Mitigasi path traversal (atau directory traversal) berfokus pada pencegahan manipulasi input pengguna yang bertujuan mengakses file atau direktori di luar cakupan yang diizinkan pada sistem file server. Kunci utama mitigasi adalah tidak pernah mempercayai input pengguna dan menerapkan validasi ketat pada setiap parameter yang digunakan untuk operasi file.
Teknik Mitigasi Utama
Implementasi keamanan harus dilakukan secara berlapis (defense-in-depth). Berikut adalah tabel metode mitigasi yang direkomendasikan:
| Metode | Deskripsi | Tingkat Efektivitas |
|---|---|---|
| Input Validation | Menggunakan whitelist karakter (hanya alfanumerik) | Tinggi |
| Path Canonicalization | Mengubah path ke bentuk absolut sebelum validasi | Sangat Tinggi |
| Chroot Jail | Membatasi akses proses ke direktori tertentu | Sangat Tinggi |
| Indirect File Reference | Menggunakan ID/Index sebagai pengganti nama file | Tertinggi |
Implementasi Teknis (Contoh Kode)
Hindari penggunaan input langsung dalam fungsi sistem. Gunakan fungsi bawaan bahasa pemrograman untuk memvalidasi path. Berikut adalah contoh implementasi menggunakan PHP untuk memastikan file berada di dalam direktori yang diizinkan:
$base_dir = '/var/www/uploads/';
$requested_path = $_GET['file'];
// Canonicalize path
$real_base = realpath($base_dir);
$real_path = realpath($base_dir . $requested_path);
// Validasi apakah path berada di dalam base_dir
if ($real_path && strpos($real_path, $real_base) === 0 && file_exists($real_path)) {
include($real_path);
} else {
die('Akses Ditolak');
}Langkah-Langkah Pencegahan
- Gunakan Indirect Reference: Jangan pernah mengekspos nama file asli. Gunakan database untuk memetakan ID (misal: 101) ke nama file asli (misal: laporan_keuangan.pdf).
- Validasi Input: Terapkan whitelist. Jika input diharapkan berupa nama file, pastikan hanya berisi karakter alfanumerik dan ekstensi yang diizinkan.
- Hak Akses Minimum: Jalankan aplikasi web dengan user yang memiliki hak akses seminimal mungkin pada sistem operasi (Least Privilege Principle).
- Gunakan API File System yang Aman: Gunakan fungsi bawaan framework yang sudah memiliki proteksi bawaan terhadap traversal daripada fungsi sistem mentah (seperti
fopenatauinclude).
Troubleshooting Lapangan
Jika aplikasi masih rentan, periksa apakah fungsi realpath() atau fungsi serupa di bahasa pemrograman Anda menangani simbolik link dengan benar. Pastikan juga konfigurasi server web (seperti Apache atau Nginx) tidak mengizinkan akses ke direktori sensitif seperti /etc/passwd atau file konfigurasi aplikasi.