.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 -Includes
Mari 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.php
tetap 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.