Skrip Server Side Includes (SSI) adalah kumpulan direktif atau perintah pemrosesan di sisi server yang disematkan langsung ke dalam dokumen HTMLβbiasanya berekstensi .shtmlβuntuk menyisipkan konten dinamis sebelum halaman dikirimkan ke peramban pengguna. Server web mengevaluasi tag SSI secara berurutan dari atas ke bawah, mengeksekusi instruksi seperti penggabungan berkas modular (header, footer, navigasi), penayangan variabel lingkungan, hingga pencetakan waktu pembaruan dokumen.
Format penulisan skrip SSI sengaja dirancang menyerupai komentar HTML dengan pola baku: <!--#direktif parameter="nilai" -->. Karena dibungkus dalam tag komentar, server yang tidak mengaktifkan modul SSI akan mengabaikan baris tersebut secara aman tanpa merusak tampilan antarmuka situs, sementara server yang mendukung SSI akan mengganti seluruh blok tag dengan output komputasi yang dihasilkan secara instan.
Sintaks Dasar dan Perintah Utama Skrip SSI
Direktif SSI bekerja dengan memanggil fungsi internal modul server web (seperti mod_include pada Apache). Penggunaan paling dominan dalam arsitektur web statis modular adalah perintah #include, yang berfungsi memanggil file eksternal ke dalam kerangka dokumen utama sehingga administrator tidak perlu menduplikasi kode bar navigasi atau hak cipta di ratusan halaman statis.
Berikut adalah implementasi langsung sintaks skrip SSI yang paling sering dipakai di lingkungan produksi:
<!-- Menyisipkan file navigasi modular -->
<!--#include virtual="/includes/navigasi.html" -->
<!-- Menampilkan tanggal dan waktu lokal server -->
<p>Waktu server saat ini: <!--#echo var="DATE_LOCAL" --></p>
<!-- Menampilkan waktu terakhir halaman ini dimodifikasi -->
<p>Terakhir diperbarui: <!--#flastmod file="index.shtml" --></p>
<!-- Mengatur format cetak tanggal -->
<!--#config timefmt="%d %B %Y, %H:%M WIB" -->Perlu dibedakan secara tegas antara parameter file dan virtual pada direktif #include. Parameter file mendefinisikan path relatif terhadap direktori dokumen saat ini dan tidak boleh merujuk path tingkat atas dengan awalan ../ demi alasan keamanan. Sebaliknya, parameter virtual merujuk pada URL path relatif terhadap direktori DocumentRoot situs web, menjadikannya standar baku untuk menyematkan aset bersama seperti template global.
Daftar Direktif Skrip SSI dan Spesifikasi Fungsinya
Masing-masing direktif SSI memiliki parameter spesifik yang mengontrol keluaran data ke peramban. Tabel berikut merangkum direktif utama yang didukung secara universal oleh web server modern:
| Direktif | Parameter Kunci | Contoh Penulisan Sintaks | Fungsi & Output Sistem |
|---|---|---|---|
#include | virtual, file | <!--#include virtual="/layout/menu.html" --> | Menyisipkan isi dokumen HTML/teks lain ke titik pemanggilan. |
#echo | var | <!--#echo var="REMOTE_ADDR" --> | Mencetak variabel lingkungan server (IP pengunjung, URL, browser). |
#config | timefmt, sizefmt, errmsg | <!--#config errmsg="Gagal memuat blok ini" --> | Mengonfigurasi pesan galat, format ukuran file, dan tata letak tanggal. |
#flastmod | virtual, file | <!--#flastmod file="laporan.pdf" --> | Menghasilkan stempel waktu (timestamp) revisi terakhir sebuah berkas. |
#fsize | virtual, file | <!--#fsize file="arsip.zip" --> | Menghitung dan mencetak ukuran berkas dalam hitungan byte atau format KB/MB. |
#set | var, value | <!--#set var="kategori" value="Tutorial" --> | Mendefinisikan variabel lokal kustom untuk operasi kondisional logika. |
#if / #else | expr | <!--#if expr="$kategori = 'Tutorial'" --> | Menyediakan percabangan logika berbasis kondisi variabel lingkungan. |
#exec | cgi, cmd | <!--#exec cgi="/cgi-bin/counter.pl" --> | Mengeksekusi skrip CGI atau perintah shell sistem operasi (berisiko tinggi). |
Konfigurasi Server Web untuk Menjalankan SSI
Secara default, sebagian besar instalasi web server menonaktifkan pemrosesan SSI demi menghemat alokasi CPU dan mencegah risiko eksploitasi perintah server. Agar dokumen dengan skrip SSI dapat diparsing sempurna, administrator wajib mengaktifkan modul parser pada konfigurasi server.
1. Konfigurasi pada Apache HTTP Server
Pada server Apache, parsing SSI ditangani oleh modul mod_include. Anda dapat mengaktifkannya melalui berkas httpd.conf atau berkas lokal .htaccess di direktori root situs:
<Directory "/var/www/html">
Options +Includes
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</Directory>Jika Anda ingin Apache memindai skrip SSI pada berkas HTML biasa berekstensi .html tanpa harus mengubah semua ekstensi menjadi .shtml, tambahkan baris AddOutputFilter INCLUDES .html. Namun, perlu diperhatikan bahwa langkah ini akan menambah beban kerja server karena setiap permintaan file HTML statis akan dipindai secara keseluruhan sebelum disajikan.
2. Konfigurasi pada Nginx
Nginx memiliki modul SSI bawaan yang sangat ringan. Anda cukup mengaktifkan direktif ssi on; di dalam blok server atau blok location pada file nginx.conf:
server {
listen 80;
server_name domainanda.com;
root /usr/share/nginx/html;
index index.shtml index.html;
location / {
ssi on;
ssi_silent_errors on;
ssi_types text/html;
}
}Ancaman Keamanan SSI Injection dan Cara Mitigasinya
Kelemahan terbesar penggunaan skrip SSI terletak pada celah SSI Injection. Kerentanan ini terjadi saat aplikasi web menerima input data dari pengunjung (misalnya form buku tamu, kolom komentar, atau input header HTTP) dan langsung mencetaknya kembali ke halaman web yang diparsing oleh modul SSI tanpa melewati proses validasi dan sanitasi karakter.
Jika penyerang memasukkan string manipulatif seperti <!--#exec cmd="cat /etc/passwd" --> atau <!--#include virtual="/../config.php" -->, parser server akan mengeksekusi instruksi tersebut atas hak akses sistem akun web server (seperti www-data atau apache). Hal ini dapat menyebabkan kebocoran kredensial basis data hingga pengambilalihan kontrol server (Remote Code Execution).
Langkah mitigasi paling efektif adalah mematikan eksekusi shell command sepenuhnya dengan menggunakan opsi IncludesNOEXEC pada Apache:
Options +IncludesNOEXECOpsi ini tetap mengizinkan penggunaan #include dan #echo untuk penyusunan halaman modular, namun memblokir total direktif #exec. Selain itu, seluruh entitas karakter input pengguna seperti tanda kurung siku (<, >), tanda seru (!), dan tanda kutip wajib dikonversi menjadi entitas HTML aman sebelum disimpan atau dirender kembali ke dokumen web.