Konfigurasi aman untuk Server Side Includes (SSI) pada Apache web server memerlukan pembatasan direktif Options dan pengetatan kontrol akses guna mencegah eksploitasi perintah eksekusi sistem. Default instalasi Apache sering kali mengizinkan penggunaan SSI secara longgar yang berisiko membuka celah Remote Code Execution (RCE) jika pengguna dapat mengunggah file berekstensi .shtml.
Langkah Teknis Pengamanan SSI Apache
Untuk mengamankan SSI, administrator harus menonaktifkan eksekusi perintah shell melalui modul mod_include, membatasi direktori yang diizinkan menggunakan SSI, dan menerapkan validasi ketat pada file yang diproses.
1. Modifikasi File Konfigurasi Apache (httpd.conf atau sites-available)
Edit blok direktori situs Anda untuk mematikan fungsi IncludesNOEXEC atau menghapus total opsi Includes jika SSI tidak diperlukan. Jika SSI wajib digunakan, pastikan hanya menggunakan opsi IncludesNOEXEC agar perintah sistem operasi tidak dapat dieksekusi.
<Directory "/var/www/html">
# Hanya izinkan SSI tanpa kemampuan eksekusi perintah OS
Options -Indexes +IncludesNOEXEC
# Pastikan ekstensi file yang memproses SSI dibatasi
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</Directory>
2. Matikan SSI Secara Global Jika Tidak Digunakan
Jika aplikasi web Anda tidak menggunakan Server Side Includes, nonaktifkan modul terkait pada tingkat server utama untuk meminimalisir permukaan serangan (attack surface).
# Hapus atau comment baris berikut di konfigurasi utama
# LoadModule include_module modules/mod_include.so
Tabel Perbandingan Opsi Direktif SSI Apache
| Opsi Direktif | Deskripsi Keamanan | Tingkat Risiko |
|---|---|---|
Options +Includes |
Mengizinkan SSI penuh termasuk eksekusi perintah shell (<!--#exec-->). |
Sangat Tinggi |
Options +IncludesNOEXEC |
Mengizinkan SSI untuk menyertakan file (include, echo) tetapi melarang eksekusi perintah OS. |
Sedang |
Options -Includes |
Menonaktifkan seluruh fitur SSI pada direktori tersebut. | Aman |
Troubleshooting & Validasi Keamanan
Setelah melakukan perubahan konfigurasi, lakukan langkah-langkah verifikasi berikut:
- Uji sintaks konfigurasi Apache menggunakan perintah
sudo apache2ctl configtestatausudo httpd -tuntuk memastikan tidak ada kesalahan penulisan. - Restart layanan web server dengan
sudo systemctl restart apache2(Ubuntu/Debian) atausudo systemctl restart httpd(RHEL/CentOS). - Lakukan pengujian dengan menyisipkan tag
<!--#exec cmd="ls"-->pada file uji.shtml. Konfigurasi yang aman akan mengembalikan error atau mengabaikan perintah tersebut, bukan menampilkan hasil direktori server.