ThemesCorners
Blog
10 menit bacaoleh ThemesCorners

Daftar Hardening Keamanan WordPress 2026

Selusin pengaturan yang benar-benar berdampak pada keamanan WordPress tahun ini — termasuk yang ditambahkan di 6.7 dan 6.8.

Permukaan serangan WordPress di 2026 berbeda dari 2022. Mayoritas eksploitasi yang kami lihat hari ini bukan zero-day di core — mereka adalah application password yang dicuri, rangkaian RCE plugin yang menyalahgunakan endpoint REST, dan supply-chain takeover plugin kecil. Daftar ini adalah selusin hal yang benar-benar kami lakukan di setiap situs yang kami kirim.

1. Wajibkan application passwords untuk REST API

WordPress 6.7 menjadikan application passwords cara yang direkomendasikan untuk autentikasi trafik mesin. Matikan autentikasi REST berbasis password untuk klien non-cookie:

add_filter('wp_is_application_passwords_available', '__return_true');
add_filter('rest_authentication_errors', function ($result) {
    if (! empty($result)) return $result;
    if (! is_user_logged_in() && ! wp_get_current_user()->ID) {
        return new WP_Error('rest_not_logged_in', 'Authentication required.', ['status' => 401]);
    }
    return $result;
});

Padukan dengan rate-limiting di layer CDN — tier gratis Cloudflare sudah cukup.

2. Aktifkan pemeriksaan integritas auto-update baru

WordPress 6.8 mengirim update core yang ditandatangani (Ed25519) secara default. Untuk plugin, opt-in:

add_filter('automatic_updates_is_vcs_checkout', '__return_false');
add_filter('auto_update_plugin', '__return_true');

Lalu tambahkan webhook notifikasi agar Anda tahu dalam hitungan menit jika update gagal verifikasi:

add_action('automatic_updates_complete', function ($update_results) {
    if (! empty($update_results['plugin']['failed'])) {
        wp_remote_post('https://hooks.slack.com/...', [
            'body' => json_encode(['text' => 'WP auto-update failed']),
        ]);
    }
});

3. Matikan XML-RPC kecuali benar-benar dipakai

Kebanyakan situs tidak. Ini adalah endpoint kedua paling banyak diserang setelah /wp-login.php:

add_filter('xmlrpc_enabled', '__return_false');

Pastikan Anda tidak menggunakan Jetpack Publicize, aplikasi mobile WP, atau integrasi IFTTT lama terlebih dulu.

4. Sembunyikan /wp-admin di balik HTTP basic auth

Untuk situs dengan tim editor yang tetap, tambahkan basic auth di Nginx di depan admin:

location ^~ /wp-admin/ {
    auth_basic           "Admins only";
    auth_basic_user_file /etc/nginx/.htpasswd-tc;
    try_files $uri $uri/ /index.php?$args;
}

Autentikasi berlapis berarti password WordPress yang dicuri pun tak berguna tanpa kredensial basic-auth, yang tidak pernah berjalan lewat API auth publik.

5. Pin checksum plugin

WordPress 6.7 menambahkan wp plugin verify-checksums ke WP-CLI. Jalankan tiap malam via cron dan beri alert pada mismatch — begitulah Anda menangkap supply-chain compromise dalam hitungan jam, bukan minggu.

6. Ganti wp_die() dengan halaman error kustom

wp_die() default mengungkap versi WordPress pada setiap fatal error. Handler sederhana:

add_filter('wp_php_error_message', function () { return ''; });
add_filter('wp_php_error_args', function ($args) {
    $args['response'] = 500;
    return $args;
});

7. Force-rotate session key bila dicurigai

Tambahkan tombol admin satu klik yang menjalankan:

wp_destroy_other_sessions();
\WP_Session_Tokens::get_instance(wp_get_current_user()->ID)->destroy_all();

Bila Anda curiga ada cookie dicuri, ini langsung membatalkan setiap sesi aktif untuk semua pengguna.

8. Matikan editor file dari dashboard

Yang ini sangat dasar dan memalukan seberapa sering kami masih menemukannya tidak diaktifkan:

define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true);  // juga memblok pemasangan plugin via dashboard

Konstanta kedua mencegah siapa pun — bahkan admin yang dikompromi — memasang plugin berbahaya lewat UI.

9. Pasang header Content-Security-Policy ketat

Di konfigurasi edge (Vercel, Cloudflare Workers, Nginx):

Content-Security-Policy: default-src 'self'; script-src 'self' 'sha256-...';
  style-src 'self' 'unsafe-inline'; img-src 'self' data: https:;
  frame-ancestors 'none'; base-uri 'self';

'unsafe-inline' untuk style adalah harga yang harus dibayar untuk pakai block editor — tetapi frame-ancestors 'none' memblokir clickjacking dan base-uri 'self' memblokir injeksi <base>, dua vektor serangan nyata yang kami lihat di 2025.

10. Pakai Sentry (atau setara) untuk error PHP

Setiap warning PHP penting. Pola stack-trace adalah cara penyerang menemukan jalur kode yang dapat dieksploitasi. Kirim semua warning ke satu tempat; Undefined index yang tidak dijelaskan pada parameter query sering kali adalah probing penyerang.

11. Aktifkan 2FA — tapi pakai passkey, bukan TOTP

WordPress 6.7 menambahkan dukungan passkey native via WebAuthn API. Wajibkan untuk semua editor:

add_filter('manage_users_columns', function ($cols) {
    $cols['passkey'] = 'Passkey';
    return $cols;
});
add_action('user_register', function ($userId) {
    update_user_meta($userId, '_passkey_required', 1);
});

Passkey tidak bisa di-phishing. TOTP bisa.

12. Jalankan wp doctor setiap minggu

Perintah WP-CLI doctor sejak versi 2.10 sudah membawa suite security bawaan. Pipe outputnya ke monitoring Anda:

wp doctor check security --format=json | jq -e '[.[]|select(.status!="success")]|length==0'

Exit code 1 = ada yang harus diperbaiki minggu ini.

Hentikan hal-hal ini

  • Mengganti nama /wp-admin atau /wp-login.php. Security through obscurity. Buang 30 menit setup, merusak plugin, memblok nol penyerang nyata.
  • Memasang 7 plugin keamanan. Mereka tumpang tindih, konflik, dan menjatuhkan performa. Wordfence atau iThemes Security, salah satu, dikonfigurasi benar, sudah cukup.
  • IP-allowlist /wp-admin dari IP rumah Anda. ISP merotasi IP itu dan Anda mengunci diri sendiri jam 11 malam Jumat. Percaya kami, kami pernah.

Catatan tentang hosting

Managed WordPress hosting di 2026 (Pressable, Kinsta, WP Engine, Cloudways) menangani 1–4 dari daftar ini untuk Anda secara transparan. Kalau Anda di VPS mentah, Anda menanggung semua dua belas. Anggarkan sesuai.

Artikel terkait