Pengerasan PHP untuk WordPress

Diterbitkan: 2021-06-29

WordPress berjalan di PHP, dan merupakan komponen inti yang harus diperhatikan saat mengeraskan situs WordPress Anda. Artikel ini akan membahas beberapa hal paling umum yang dapat Anda bahas terkait keamanan PHP untuk WordPress.

Perhatian – Berhati-hatilah saat membuat perubahan pada pengaturan PHP Anda. Pengaturan dan sintaks yang salah dapat merusak situs web Anda. Selalu uji perubahan Anda dalam lingkungan pengembangan atau pementasan sebelum membuat perubahan dalam produksi.

Daftar Isi

  • Gunakan versi PHP terbaru
  • Menekan versi PHP
  • Hapus semua file phpinfo()
  • Menekan kesalahan dan peringatan PHP
  • Batasi termasuk
  • Nonaktifkan file jarak jauh termasuk
  • Nonaktifkan atau batasi fungsi berbahaya
  • Blokir eksekusi PHP di direktori sensitif
  • Kesimpulan

Gunakan versi PHP terbaru

Selain memastikan Anda menambal sistem operasi Anda, server MySQL, server web (mis. Nginx, Apache, IIS…) juga sangat penting untuk memastikan Anda menjalankan versi PHP 1 yang didukung penuh. .

Karena PHP terekspos ke Internet (karena WordPress berjalan di atas interpreter PHP), ini berisiko lebih besar untuk diserang jika eksploitasi kerentanan dalam PHP ditemukan. Sejauh ini, menjaga agar PHP tetap up to date (dan terlebih lagi, untuk menjauh dari versi PHP 5.x akhir masa pakainya) sangat penting tidak hanya untuk mencegah serangan terjadi, tetapi juga memungkinkan penyerang untuk meningkatkan serangan jika mereka berhasil mendapatkan pijakan ke situs WordPress Anda (misalnya dengan mengeksploitasi kerentanan dalam plugin WordPress).

Menekan versi PHP

Seperti kebanyakan perangkat lunak server web, secara default, PHP mengekspos versi yang dijalankannya melalui header HTTP X-Powered-By. Meskipun ini sendiri bukanlah kerentanan keamanan, seperti dalam situasi lain, enumerasi versi perangkat lunak umumnya berguna bagi penyerang selama fase pengintaian serangan. Oleh karena itu, dengan menonaktifkan versi PHP, Anda akan membuat serangan sedikit lebih sulit untuk berhasil.

Untungnya, ini mudah dinonaktifkan menggunakan pengaturan expose_php. Dalam file konfigurasi php.ini Anda, cukup tambahkan berikut ini.

expose_php = Off

Hapus semua file phpinfo()

Membuat file PHP menggunakan fungsi phpinfo() yang digunakan untuk debugging adalah kebiasaan buruk yang umum dimiliki banyak administrator sistem PHP. Jika penyerang menemukan file 'phpinfo' (biasanya, namanya tidak mengejutkan, phpinfo.php), mereka diberi banyak informasi dan detail tentang tidak hanya versi PHP yang berjalan di server, tetapi juga aspek lain dari situs web seperti sebagai web dan database server.

Jika Anda benar-benar perlu menjalankan phpinfo(), jauh lebih baik melakukannya dari baris perintah, sebagai berikut.

php -i

Jika Anda memiliki lebih dari satu konfigurasi PHP di sistem Anda (sangat umum), Anda dapat menggunakan perintah berikut untuk menentukan file php.ini mana yang akan digunakan.

php -c /etc/php/apache2/php.ini -i

Menekan kesalahan dan peringatan PHP

Sementara kesalahan, peringatan, dan pengecualian sangat membantu selama pengembangan, jika ditampilkan di lingkungan yang menghadap publik, penyerang akan sering menggunakan informasi ini untuk mendapatkan wawasan tentang konfigurasi server, tata letak aplikasi, dan komponen.

Pesan kesalahan adalah beberapa jalur paling umum untuk pengungkapan informasi, sering kali membocorkan informasi seperti jalur penginstalan aplikasi dan detail konektivitas database. Alih-alih menampilkan kesalahan dan peringatan, pastikan bahwa informasi ini dicatat. Informasi lebih lanjut tentang topik ini dapat ditemukan di dokumentasi resmi PHP.

Untungnya, ini mudah dinonaktifkan menggunakan pengaturan display_errors. Dalam file konfigurasi php.ini Anda, cukup tambahkan berikut ini.

display_errors = Off
log_errors = On

Batasi termasuk

Kerentanan penyertaan file memungkinkan penyerang mengontrol pernyataan include() PHP. Sementara PHP akan mengeksekusi kode PHP apa pun dalam file yang disertakan, itu akan mencetak apa pun (dengan asumsi itu plaintext). Ini berarti bahwa penyerang yang mengendalikan kerentanan penyertaan file mungkin berakhir dengan menjalankan sesuatu yang mirip dengan berikut ini, memberi mereka akses ke file sistem yang sensitif. Untuk membaca lebih lanjut tentang penyertaan file, lihat artikel ini.

include "../../../../etc/passwd"

Dengan mengatur pengaturan open_basedir di php.ini, Anda dapat menginstruksikan PHP untuk hanya mengizinkan penyertaan dalam direktori tertentu dan di bawahnya. Meskipun hal ini tidak menghilangkan kerentanan penyertaan file, ini tentu saja membuatnya lebih terbatas, dan juga menggagalkan beberapa serangan lanjutan yang dapat menyebabkan eksekusi kode (ketika penyerang dapat menjalankan perintah di server Anda).

Anda dapat mengatur pengaturan open_basedir PHP sebagai berikut di file php.ini Anda.

open_basedir = /var/www/html/example.com

Nonaktifkan file jarak jauh termasuk

Selain membatasi penyertaan lokal ke direktori tertentu menggunakan open_basedir, juga disarankan untuk menonaktifkan penyertaan jarak jauh. Serangan inklusi file jarak jauh (RFI) bekerja mirip dengan serangan inklusi file lokal, tetapi penyerang tidak terikat pada file di sistem, inklusi file jarak jauh memungkinkan penyerang memasukkan file melalui jaringan. Ini sangat berbahaya, dan sebagian besar serangan RFI berakhir dengan penyerang yang dapat mengeksekusi kode secara sewenang-wenang di server web Anda (disebut sebagai eksekusi kode jarak jauh, atau, RCE).

Untuk menonaktifkan penyertaan file jarak jauh, gunakan opsi allow_url_fopen dan allow_url_include PHP di file php.ini Anda sebagai berikut.

allow_url_fopen = Off
allow_url_include = Off

Nonaktifkan atau batasi fungsi berbahaya

Jika penyerang, terlepas dari semua tindakan keamanan Anda, berhasil menemukan kerentanan dalam keamanan PHP WordPress Anda, yang dapat mereka eksploitasi, hal terakhir yang Anda inginkan adalah mereka dapat menjalankan kode arbitrer di server Anda . Jika penyerang dapat menjalankan kode arbitrer di server Anda, mereka kemungkinan dapat menginstal webshell atau membuat shell terbalik untuk lebih mengontrol server Anda dan menggunakannya untuk melakukan penawaran jahat mereka (seperti menyebarkan malware, menggunakan situs web Anda untuk kampanye phishing atau penolakan serangan layanan, atau bahkan menambang cryptocurrency).

Dengan menonaktifkan fungsi seperti shell_exec() dan system(), Anda dapat mencegah pengguna dan penyerang memanfaatkan fungsi berbahaya ini. Meskipun mungkin ada alasan yang sah untuk menggunakan fungsi-fungsi ini, mereka sangat sedikit dan jauh di antaranya, dan biasanya ada cara yang lebih aman untuk mencapai hasil yang sama.

Perhatian – Uji yang berikut ini secara menyeluruh dalam lingkungan pengujian atau pementasan sebelum menjalankan ini dalam produksi, karena beberapa perangkat lunak/plugin yang Anda jalankan mungkin (semoga sah) bergantung pada fungsi ini.

Berikut ini adalah kumpulan fungsi yang berpotensi berbahaya yang mungkin ingin Anda nonaktifkan di PHP menggunakan pengaturan disable_functions di file php.ini Anda.

disable_functions = php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace,
tmpfile, link, ignore_user_abord, shell_exec, dl, exec, system, highlight_file, source,
show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid,
posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid,
posix_getpgrp, posix_getpid, posix_getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, 
posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, 
posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, 
proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo</em>

Blokir eksekusi PHP di direktori sensitif

Secara default, direktori wp-content/uploads Anda, yang digunakan untuk mengunggah tema, plugin, gambar, video, dan file lain ke situs web Anda diizinkan untuk mengeksekusi kode PHP. Ini agak berisiko – jika penyerang entah bagaimana dapat memanfaatkan kerentanan pengunggahan file di plugin atau tema, mereka mungkin dapat mengunggah webshell atau jenis backdoor serupa. Karena eksekusi PHP akan diizinkan di dalam direktori wp-content/uploads , penyerang itu mungkin dapat benar-benar mengeksekusi kode PHP itu untuk melakukan penawaran jahat mereka.

Mencegahnya sebenarnya cukup sederhana – nonaktifkan eksekusi PHP di dalam wp-content/uploads dan direktori. Cara yang naif adalah dengan hanya memblokir akses ke file *.php seperti menggunakan .htaccess .

<Files *.php>
deny from all
</Files>

Namun, konfigurasi di atas relatif mudah untuk dilewati – PHP dalam banyak kasus akan dengan senang hati mengeksekusi file .phtml .php3. Cara yang paling antipeluru adalah dengan benar-benar menonaktifkan mesin PHP di dalam direktori. Konfigurasi .htaccess berikut harus ditempatkan di dalam wp-content/uploads dan direktori wp-includes (direktori lain yang biasanya ditargetkan oleh penyerang).

php_flag engine off

Keamanan PHP untuk WordPress – pemikiran terakhir

Sementara WordPress sendiri dianggap sebagai platform yang kuat dan aman, lingkungan dan infrastruktur tempat instalasi WordPress Anda berjalan sangat membantu untuk memastikan keamanan situs web Anda secara keseluruhan. Menerapkan topik yang tercakup dalam panduan pengerasan keamanan PHP ini, akan memberi Anda garis pertahanan kedua, sehingga secara signifikan lebih sulit bagi penyerang untuk meningkatkan serangan setelah menyalahgunakan kerentanan dalam situs WordPress Anda.

Jika Anda ingin mempelajari lebih lanjut tentang cara mengeraskan situs WordPress Anda, baca panduan definitif kami tentang keamanan & pengerasan WordPress.

Referensi yang digunakan dalam artikel ini [ + ]

Referensi yang digunakan dalam artikel ini
1 https://www.php.net/supported-versions.php