WordPress memang dapat berjalan dengan konfigurasi yang relatif sederhana. Namun, pada website yang sudah aktif dan memiliki banyak artikel, membiarkan seluruh kemampuan administrasi terbuka tanpa alasan yang jelas dapat menambah risiko yang sebenarnya tidak perlu.
Pengamanan pada tahap ini bukan berarti memasang puluhan aturan yang sulit dipelihara. Justru beberapa konstanta bawaan WordPress sudah menyediakan cara sederhana untuk mematikan editor file, membatasi revisi artikel, memaksa HTTPS pada area administrasi, dan memperkuat mekanisme cookie serta nonce.

wp-config.php sebaiknya dilakukan secara terukur agar keamanan meningkat tanpa membuat konfigurasi sulit dirawat.Empat pengaturan yang layak diperhatikan
Jika konfigurasi dasar WordPress sudah normal dan mode debug untuk website produksi telah dimatikan, perhatian berikutnya dapat diarahkan pada empat bagian: editor file, revisi artikel, koneksi HTTPS untuk administrasi, dan secret keys atau salts. Keempatnya menangani masalah yang berbeda sehingga tidak sebaiknya dianggap sebagai satu pengaturan keamanan yang sama.
1. Matikan editor file WordPress
Konstanta DISALLOW_FILE_EDIT dapat digunakan untuk menghilangkan kemampuan mengedit file tema dan plugin langsung dari dashboard WordPress.
define( 'DISALLOW_FILE_EDIT', true );Ini penting karena dashboard administrator bukan tempat yang ideal untuk mengubah source code secara langsung. Dengan editor tersebut dimatikan, akun yang memiliki akses administrasi tidak otomatis mendapatkan antarmuka untuk menyisipkan atau mengubah kode PHP tema maupun plugin.
Perlu dibedakan antara file editing dan instalasi atau pembaruan plugin. DISALLOW_FILE_EDIT berfokus pada editor kode di dashboard, bukan berarti seluruh kemampuan pengelolaan plugin WordPress otomatis hilang.
2. Batasi jumlah revisi artikel
WordPress menyimpan revisi tulisan sehingga pengguna dapat kembali ke versi sebelumnya. Fitur tersebut berguna, tetapi pada website dengan aktivitas penerbitan tinggi jumlah revisi dapat terus bertambah.
define( 'WP_POST_REVISIONS', 5 );Nilai 5 pada contoh tersebut berarti WordPress dibatasi untuk menyimpan hingga lima revisi. Pengaturan ini bukan sekadar soal keamanan, tetapi juga pengendalian pertumbuhan data yang tidak selalu memberikan manfaat setelah jumlah revisi tertentu.
Jika kebutuhan editorial website berbeda, angka tersebut dapat disesuaikan. Jangan menganggap angka lima sebagai nilai universal untuk semua website karena kebutuhan situs berita, blog pribadi, dokumentasi, dan website dengan banyak editor bisa berbeda.
3. Paksa SSL untuk area administrasi
Untuk website yang sudah berjalan melalui HTTPS, area login dan administrasi WordPress sebaiknya juga menggunakan koneksi terenkripsi.
define( 'FORCE_SSL_ADMIN', true );Dengan pengaturan tersebut, WordPress diarahkan menggunakan HTTPS ketika menangani halaman administrasi. Ini membantu melindungi lalu lintas antara browser dan server ketika kredensial serta data sesi digunakan.
Penting: pastikan HTTPS pada domain memang sudah aktif dan berfungsi dengan benar sebelum menerapkan pengaturan ini. Konfigurasi SSL yang belum siap dapat menyebabkan masalah ketika mengakses area administrasi.
Mengapa Salt Keys perlu diganti?
WordPress menggunakan sekumpulan secret keys dan salts untuk membantu mengamankan cookie, sesi autentikasi, serta token keamanan tertentu. Nilai ini seharusnya berupa string acak yang hanya tersimpan pada konfigurasi server.
Bagian ini berbeda dari password administrator. Kamu tidak mengetik salt ketika login dan tidak perlu menghafalnya. WordPress menggunakannya secara internal untuk memperkuat mekanisme autentikasi dan keamanan sesi.
define('AUTH_KEY', 'isi-dengan-string-acak');
define('SECURE_AUTH_KEY', 'isi-dengan-string-acak');
define('LOGGED_IN_KEY', 'isi-dengan-string-acak');
define('NONCE_KEY', 'isi-dengan-string-acak');
define('AUTH_SALT', 'isi-dengan-string-acak');
define('SECURE_AUTH_SALT', 'isi-dengan-string-acak');
define('LOGGED_IN_SALT', 'isi-dengan-string-acak');
define('NONCE_SALT', 'isi-dengan-string-acak');Jangan menggunakan contoh teks di atas sebagai nilai sebenarnya. Gunakan generator resmi WordPress untuk mendapatkan nilai acak baru, kemudian tempelkan hasilnya ke dalam wp-config.php.
Generator resmi yang disebut dalam konfigurasi tersebut dapat diakses melalui API Secret Key WordPress.
Apakah Salt Keys perlu disimpan secara offline?
Untuk penggunaan sehari-hari, kamu tidak perlu menyimpan Salt Keys dalam catatan offline hanya agar dapat menggunakannya saat login. WordPress membaca nilainya langsung dari wp-config.php, sementara pengguna tidak perlu memasukkannya secara manual.
Namun, ada perbedaan antara tidak perlu menghafal dan tidak perlu memiliki cadangan sama sekali. Jika kamu mempunyai sistem backup konfigurasi server yang aman, menyertakan file konfigurasi tersebut dalam backup terenkripsi dapat berguna ketika website harus dipulihkan.
Yang harus dihindari adalah menyimpan salinan wp-config.php secara sembarangan, terutama jika file tersebut juga berisi kredensial database. Salinan konfigurasi sebaiknya diperlakukan sebagai informasi rahasia dan tidak diletakkan pada repository publik, cloud drive tanpa perlindungan, atau perangkat yang tidak dipercaya.
Penggantian salt akan memengaruhi sesi login
Salah satu konsekuensi penting ketika Salt Keys diganti adalah sesi autentikasi yang sedang aktif dapat menjadi tidak valid. Artinya, pengguna yang sedang login, termasuk administrator, mungkin harus masuk kembali.
Dalam konteks keamanan, perilaku tersebut dapat berguna ketika ada dugaan bahwa secret lama pernah diketahui pihak yang tidak berwenang. Setelah salt diganti, sesi lama tidak seharusnya diperlakukan sebagai sesi yang masih dipercaya.
Kapan sebaiknya Salt Keys diganti?
Penggantian dapat dipertimbangkan ketika kamu sedang melakukan hardening setelah migrasi, memulihkan website dari insiden keamanan, atau memiliki alasan untuk menganggap secret lama sudah tidak lagi aman.
Untuk website yang normal dan tidak memiliki indikasi kompromi, tidak ada alasan untuk mengganti salt secara terus-menerus. Yang lebih penting adalah memastikan nilainya acak, rahasia, dan tidak terekspos melalui source repository atau backup yang tidak terlindungi.
Contoh konfigurasi yang lebih rapi
Berikut contoh bagian konfigurasi yang dapat dijadikan pola. Kredensial database sengaja tidak dicantumkan karena nilai tersebut merupakan rahasia yang tidak boleh dipublikasikan.
<?php
/**
* Konfigurasi Utama WordPress - Hardened Version
*/
/* Pengaturan Database */
define( 'DB_NAME', 'nama_database' );
define( 'DB_USER', 'nama_user_database' );
define( 'DB_PASSWORD', 'password_database' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );
define( 'DB_COLLATE', '' );
/* Prefix Tabel Database */
$table_prefix = 'wp_';
/* Mode Debug */
define( 'WP_DEBUG', false );
define( 'WP_DEBUG_LOG', false );
define( 'WP_DEBUG_DISPLAY', false );
/* Keamanan dan Optimasi */
define( 'DISALLOW_FILE_EDIT', true );
define( 'FORCE_SSL_ADMIN', true );
define( 'WP_POST_REVISIONS', 5 );
define( 'AUTOSAVE_INTERVAL', 160 );
/* Authentication Unique Keys and Salts */
define('AUTH_KEY', 'string-acak-dari-generator-wordpress');
define('SECURE_AUTH_KEY', 'string-acak-dari-generator-wordpress');
define('LOGGED_IN_KEY', 'string-acak-dari-generator-wordpress');
define('NONCE_KEY', 'string-acak-dari-generator-wordpress');
define('AUTH_SALT', 'string-acak-dari-generator-wordpress');
define('SECURE_AUTH_SALT', 'string-acak-dari-generator-wordpress');
define('LOGGED_IN_SALT', 'string-acak-dari-generator-wordpress');
define('NONCE_SALT', 'string-acak-dari-generator-wordpress');
/* ABSPATH WordPress */
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', __DIR__ . '/' );
}
require_once ABSPATH . 'wp-settings.php';Nilai AUTOSAVE_INTERVAL pada contoh tersebut mengatur jeda autosave dalam detik. Pengaturan ini sebaiknya disesuaikan dengan kebutuhan kerja editor, karena autosave dan revisi adalah dua mekanisme yang berbeda.
Urutan penerapan yang aman
Sebelum mengubah wp-config.php, buat backup terlebih dahulu. Pastikan kamu mempunyai cara untuk mengembalikan file apabila terdapat kesalahan sintaks atau konfigurasi.
- Backup
wp-config.phpdan database. - Pastikan website sudah dapat diakses menggunakan HTTPS.
- Tambahkan
DISALLOW_FILE_EDIT. - Tentukan batas
WP_POST_REVISIONSsesuai kebutuhan. - Aktifkan
FORCE_SSL_ADMINsetelah HTTPS dipastikan normal. - Generate Salt Keys baru melalui generator resmi WordPress.
- Ganti delapan nilai key dan salt dengan hasil generator.
- Simpan konfigurasi dan uji login ke dashboard.
Setelah selesai, periksa halaman depan, login administrator, editor artikel, plugin, serta fungsi penting lainnya. Hardening yang baik bukan hanya membuat konfigurasi terlihat lebih ketat, tetapi juga tetap menjaga website dapat beroperasi sebagaimana mestinya.
Satu hal yang lebih penting: jangan membocorkan kredensial database
wp-config.php biasanya mengandung informasi yang jauh lebih sensitif daripada sekadar pengaturan WordPress. Nama database, username database, dan terutama password database tidak boleh ditempelkan pada forum publik, repository terbuka, screenshot, atau percakapan yang dapat diakses pihak lain.
Jika kredensial database pernah terlanjur terekspos, langkah yang lebih aman adalah mengganti password user database tersebut melalui panel hosting atau sistem administrasi database, kemudian memperbarui nilai DB_PASSWORD di wp-config.php.
Prinsipnya sederhana: anggap semua kredensial yang pernah dipublikasikan sebagai kredensial yang sudah tidak rahasia. Mengganti password jauh lebih aman daripada berharap informasi tersebut tidak pernah digunakan oleh pihak lain.
Hardening tidak harus rumit
Pengamanan wp-config.php tidak harus dilakukan dengan menambahkan konfigurasi sebanyak mungkin. Beberapa pengaturan yang tepat sasaran sudah dapat mengurangi risiko pada area yang penting: editor kode, penyimpanan revisi, koneksi administrasi, dan mekanisme autentikasi.
Salt Keys juga tidak perlu diperlakukan seperti password yang harus kamu hafalkan. Yang paling penting adalah menjaga nilainya tetap rahasia, menggunakan nilai acak dari generator resmi, serta memiliki backup konfigurasi yang aman bila website memang membutuhkan prosedur pemulihan.
Dengan pendekatan seperti ini, konfigurasi WordPress tetap sederhana untuk dipelihara, sementara beberapa permukaan risiko yang tidak diperlukan dapat ditutup.