Cara Mencegah SSI Injection di Web Server Apache

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:

  1. Buka file konfigurasi Apache utama (misalnya /etc/apache2/apache2.conf atau /etc/httpd/conf/httpd.conf) atau file konfigurasi Virtual Host situs Anda.
  2. Cari blok blok direktori <Directory /var/www/html> atau blok yang sesuai dengan direktori web Anda.
  3. Ubah atau tambahkan baris direktif Options dengan menghapus parameter Includes dan IncludesNOEXEC. Pastikan menggunakan tanda minus (-) untuk menonaktifkan fungsi spesifik.
  4. Simpan konfigurasi dan lakukan pengujian sintaks menggunakan perintah terminal apachectl configtest atau httpd -t.
  5. Muat ulang (restart/reload) layanan Apache menggunakan perintah sudo systemctl reload apache2 atau sudo 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 modul mod_include secara total dari konfigurasi server Apache melalui perintah a2dismod include pada 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.