Mencegah kerentanan Server Side Includes (SSI) Injection pada web server Apache dilakukan dengan menonaktifkan direktif Includes pada modul mod_include atau membatasi eksekusi perintah sistem (exec) melalui direktif Options di dalam file konfigurasi Apache (httpd.conf atau apache2.conf) maupun file .htaccess. SSI injection terjadi ketika aplikasi web gagal memvalidasi input pengguna dengan benar, lalu memasukkannya secara langsung ke dalam halaman yang diproses oleh juru bahasa SSI Apache, sehingga penyerang dapat menjalankan perintah sistem operasi arbitrer di server.
Secara default, jika modul SSI aktif tanpa pembatasan konfigurasi, direktif seperti <!--#exec cmd="cat /etc/passwd" --> dapat disarikan dan dieksekusi langsung oleh server. Oleh karena itu, pengamanan tingkat lanjut memerlukan penyesuaian parameter direktif Options untuk menghapus fungsi eksekusi atau mematikan fitur SSI sepenuhnya pada direktori yang tidak membutuhkannya.
Langkah Konfigurasi Pencegahan SSI Injection
Berikut adalah langkah-langkah teknis yang harus diterapkan pada konfigurasi Apache untuk menutup celah eksploitasi SSI Injection:
- Buka file konfigurasi Apache utama (misalnya
/etc/apache2/apache2.confatau/etc/httpd/conf/httpd.conf) atau file konfigurasi Virtual Host situs Anda. - Cari blok blok direktori
<Directory /var/www/html>atau blok yang sesuai dengan direktori web Anda. - Ubah atau tambahkan baris direktif
Optionsdengan menghapus parameterIncludesdanIncludesNOEXEC. Pastikan menggunakan tanda minus (-) untuk menonaktifkan fungsi spesifik. - Simpan konfigurasi dan lakukan pengujian sintaks menggunakan perintah terminal
apachectl configtestatauhttpd -t. - Muat ulang (restart/reload) layanan Apache menggunakan perintah
sudo systemctl reload apache2atausudo systemctl reload httpd.
Contoh Blok Konfigurasi Aman
<Directory /var/www/html>
# Menonaktifkan SSI dan eksekusi perintah total pada direktori ini
Options -Indexes -FollowSymLinks -Includes -ExecCGI
AllowOverride None
Require all granted
</Directory>
Jika aplikasi Anda benar-benar membutuhkan fungsi SSI namun ingin mencegah perintah sistem (exec) dijalankan, gunakan opsi IncludesNOEXEC alih-alih Includes penuh. Namun, pendekatan paling aman bagi sebagian besar situs web non-statis adalah dengan mematikan fitur SSI sepenuhnya.
Tabel Perbandingan Opsi Direktif Apache untuk SSI
| Direktif Opsi | Status SSI | Eksekusi Perintah (Exec) | Tingkat Risiko Keamanan |
|---|---|---|---|
Options +Includes |
Aktif | Diizinkan | Sangat Tinggi (Rentan RCE) |
Options +IncludesNOEXEC |
Aktif (Parsial) | Diblokir | Sedang |
Options -Includes |
Nonaktif | Diblokir | Aman |
Validasi Input dan Sanitasi Aplikasi
Selain melakukan pengerasan (hardening) pada tingkat web server Apache, pencegahan SSI injection harus didukung oleh pengamanan kode aplikasi web:
- Whitelisting Input: Terapkan validasi ketat pada setiap parameter masukan pengguna dari form, URL query string, atau cookie. Izinkan hanya karakter alfanumerik yang aman.
- Encoding Karakter: Lakukan HTML entity encoding pada setiap data yang dikembalikan dan dirender ke dalam dokumen HTML agar tag seperti
<!--#dibaca sebagai teks biasa, bukan sebagai instruksi parser server. - Nonaktifkan Modul yang Tidak Perlu: Jika aplikasi Anda berbasis bahasa modern seperti PHP, Python, atau Node.js dan tidak menggunakan file berformat
.shtml, nonaktifkan modulmod_includesecara total dari konfigurasi server Apache melalui perintaha2dismod includepada sistem operasi berbasis Debian/Ubuntu.
Troubleshooting Lapangan
Kendala yang sering muncul setelah menonaktifkan SSI adalah halaman web menampilkan error 500 atau tag SSI muncul mentah di browser. Pastikan untuk memeriksa file log error Apache (biasanya terletak di /var/log/apache2/error.log) guna memverifikasi apakah ada konflik file .htaccess yang mencoba mengaktifkan kembali direktif Options +Includes secara lokal tanpa izin dari konfigurasi global.