Keamanan Phpinfo: Risiko Eksploitasi & Cara Melindunginya

Halaman phpinfo() adalah fungsi bawaan PHP yang menampilkan informasi lengkap mengenai konfigurasi server, modul yang aktif, variabel lingkungan, dan pengaturan direktori. Jika file atau skrip ini dibiarkan terbuka dan dapat diakses oleh publik di lingkungan produksi (production), hal ini menjadi celah keamanan kritis yang sering dimanfaatkan oleh penyerang untuk melakukan renaisans sistem (reconnaissance) guna merencanakan serangan lanjutan.

Paparan data sensitif dari phpinfo() memudahkan peretas mengetahui versi PHP yang rentan, lokasi path direktori absolut (full path disclosure), modul database yang terpasang, hingga konfigurasi keamanan server yang lemah. Oleh karena itu, skrip ini seharusnya hanya digunakan pada lingkungan pengembangan lokal (localhost/development) dan wajib dinonaktifkan atau dibatasi aksesnya pada server langsung.

Risiko Keamanan File Phpinfo di Server Produksi

Membiarkan informasi konfigurasi PHP dapat diakses siapa saja mendatangkan berbagai ancaman nyata terhadap integritas dan kerahasiaan sistem web Anda. Berikut adalah matriks risiko utama beserta dampaknya:

Jenis Informasi yang Bocor Potensi Risiko & Ancaman Tingkat Keparahan
Versi PHP & Sistem Operasi Penyerang dapat mencocokkan versi software dengan daftar eksploitasi publik (CVE database) yang spesifik. Tinggi
Full Path Disclosure (FPD) Mengetahui direktori absolut server (misal: /var/www/html/) untuk mempermudah serangan Local File Inclusion (LFI). Sedang
Environment Variables Bocornya kredensial tersembunyi, kunci API, atau parameter database yang tersimpan di environment server. Kritis
Daftar Modul & Ekstensi Aktif Mengetahui fungsi berbahaya yang tidak dinonaktifkan seperti exec(), shell_exec(), atau system(). Tinggi

Langkah Teknis Mengamankan Phpinfo

Untuk mencegah eksploitasi, Anda harus mengambil tindakan pencegahan dengan menonaktifkan fungsi ini secara global atau membatasi aksesnya secara ketat. Berikut adalah langkah-langkah teknis yang dapat diterapkan administrator sistem:

1. Menonaktifkan Fungsi phpinfo() di php.ini

Cara paling aman untuk menutup celah ini di server produksi adalah dengan memasukkan fungsi phpinfo ke dalam daftar fungsi yang dinonaktifkan (disable_functions) pada file konfigurasi utama PHP.

disable_functions = phpinfo, exec, system, passthru, shell_exec

Setelah mengubah file php.ini, pastikan Anda me-restart layanan web server (Apache atau Nginx) serta PHP-FPM agar perubahan diterapkan:

sudo systemctl restart apache2
# Atau jika menggunakan Nginx + PHP-FPM
sudo systemctl restart php8.2-fpm
sudo systemctl restart nginx

2. Membatasi Akses Berdasarkan Alamat IP (Apache & Nginx)

Jika Anda tetap memerlukan file phpinfo untuk keperluan debugging berkala tanpa menghapusnya, batasi aksesnya hanya untuk alamat IP internal atau administrator tertentu.

Konfigurasi pada Apache (.htaccess atau httpd.conf):

<Files "info.php">
    Order Deny,Allow
    Deny from all
    Allow from 192.168.1.100
</Files>

Konfigurasi pada Nginx:

location = /info.php {
    allow 192.168.1.100;
    deny all;
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Troubleshooting & Verifikasi Keamanan

Setelah menerapkan aturan di atas, lakukan verifikasi mandiri untuk memastikan bahwa celah telah tertutup rapat. Buka browser dan arahkan ke URL tempat file phpinfo Anda berada (misalnya https://namadomain.com/info.php).

Jika konfigurasi berhasil, Anda seharusnya mendapati halaman error 403 Forbidden, halaman kosong, atau pesan bahwa fungsi tersebut telah dinonaktifkan (Warning: phpinfo() has been disabled for security reasons). Jangan lupa untuk selalu menghapus file fisik seperti info.php atau test.php dari direktori publik web server Anda setelah proses debugging selesai.