.htaccess untuk Mencegah Eksekusi PHP
Salah satu titik rawan dalam aplikasi web adalah folder uploads—tempat pengguna bebas mengunggah file. Jika tidak hati-hati, folder ini bisa jadi pintu masuk hacker. Bayangkan ada yang mengunggah file bernama shell.php. Kalau server mengizinkan file itu dieksekusi, game over.
Untungnya, ada cara sederhana tapi efektif untuk mencegah hal ini: konfigurasi .htaccess.
Kenapa .htaccess Penting?
Di server Apache, .htaccess adalah file konfigurasi lokal. Artinya, kita bisa menaruh aturan keamanan spesifik untuk sebuah direktori, tanpa harus mengutak-atik konfigurasi global server.
Folder seperti /uploads, /assets, atau /media biasanya tidak butuh script PHP, cukup file statis seperti gambar, PDF, atau dokumen. Nah, inilah target ideal untuk proteksi .htaccess.
Contoh .htaccess Anti-Eksekusi PHP
Berikut contoh konfigurasi:
php_flag engine off
<FilesMatch "\.(php|php[34578]?|phtml)$">
RemoveHandler .php .php3 .php4 .php5 .php7 .php8 .phtml
RemoveType .php .php3 .php4 .php5 .php7 .php8 .phtml
ForceType text/plain
Require all denied
</FilesMatch>
Options -ExecCGI
Options -IncludesMari kita kupas satu per satu.
1. php_flag engine off
Baris ini mematikan PHP engine di folder tersebut. Jadi, meskipun ada file .php, server tidak akan mengeksekusinya.
2. <FilesMatch "\.(php|php[34578]?|phtml)$">
Aturan ini menargetkan semua file PHP atau turunannya. Di dalamnya:
RemoveHandler&RemoveType→ Menghapus asosiasi file dengan PHP.ForceType text/plain→ Kalau file.phptetap diakses, server akan mengirimnya sebagai teks biasa, bukan script.Require all denied→ Blokir total akses ke file PHP.
Dengan ini, shell.php tidak akan pernah bisa dijalankan.
3. Options -ExecCGI
Mematikan eksekusi CGI script. Ini mencegah file .cgi atau sejenisnya dipakai sebagai pintu belakang.
4. Options -Includes
Mematikan Server Side Includes (SSI). SSI memang fitur lama, tapi masih bisa disalahgunakan untuk menjalankan perintah berbahaya.
Best Practice: Taruh di Folder Upload
Biasanya aturan ini ditempatkan di folder:
/var/www/html/uploads/.htaccess
atau kalau pakai struktur Laravel/CodeIgniter:
/public/uploads/.htaccess
Dengan begitu, file hasil upload (gambar, PDF, zip, dll.) tetap bisa diakses, tapi script PHP berbahaya tidak akan pernah jalan.
Tambahan: Batasi Akses File Tertentu
Anda juga bisa memperketat dengan membatasi hanya tipe file tertentu yang boleh diakses:
<FilesMatch "\.(jpg|jpeg|png|gif|pdf|docx|zip)$">
Require all granted
</FilesMatch>
<FilesMatch ".*">
Require all denied
</FilesMatch>Aturan ini hanya mengizinkan file gambar, PDF, dokumen, dan ZIP. Sisanya otomatis ditolak.
Kesimpulan
Menambahkan .htaccess di folder upload adalah langkah kecil dengan dampak besar. Dengan konfigurasi ini:
- File PHP atau script berbahaya tidak bisa dijalankan.
- CGI dan SSI dimatikan.
- Server lebih aman dari eksploitasi upload.
Kalau aplikasi Anda berjalan di Apache dan punya folder upload publik, segera pasang aturan ini. Lebih baik mencegah sebelum terlambat.