Bagaimana cara membatasi percobaan login di WordPress untuk mencegah brute force?
Oleh Eureka Studio · Diperbarui
Jawaban singkat
WordPress membiarkan siapa saja menebak kata sandi tanpa henti. Untuk membatasi percobaan login, gunakan plugin yang menghitung login gagal per IP dalam rentang waktu tertentu dan mengunci IP itu untuk sementara, misalnya 8 kegagalan dalam 5 menit berarti menunggu 15 menit. Pastikan kegagalan 2FA dan kata sandi aplikasi juga ikut dihitung, dan masukkan IP Anda sendiri ke daftar izin.
Langkah-langkah
1Langkah 1
Lihat seperti apa tebakan tanpa batas
Tanpa batas, WordPress menjawab setiap kata sandi yang salah dengan pesan kesalahan yang sama, sesering apa pun diminta, dan pesan bawaannya bahkan memastikan bahwa nama pengguna itu ada.

2Langkah 2
Aktifkan Batas Login dan tetapkan aturannya
Di WordPress, buka Hushfort → Batas & Pembatasan lalu nyalakan Aktifkan batas login. Bawaannya 8 percobaan gagal dalam 5 menit, lalu penguncian 15 menit; setelah 4 penguncian dalam 24 jam, penguncian berlangsung 1.440 menit. Tekan Simpan Perubahan.

3Langkah 3
Masukkan IP Anda ke daftar izin dan periksa sumber IP
Lebih ke bawah, atur Sumber IP. "Otomatis (hanya header proxy yang terverifikasi)" cocok untuk sebagian besar situs, termasuk yang berada di belakang Cloudflare. Lalu tambahkan IP kantor atau rumah Anda di IP yang diizinkan agar Anda tidak pernah mengunci diri sendiri, dan simpan.

4Langkah 4
Dapatkan email saat sebuah IP dikunci
Nyalakan Email peringatan dan cantumkan satu alamat atau lebih, dipisahkan koma. Sakelar ini memerlukan SMTP yang berfungsi di situs; tanpa SMTP, Hushfort membiarkan opsi ini nonaktif dan memberi tahu alasannya.

5Langkah 5
Lihat batasnya bekerja
Setelah jumlah kegagalan yang diizinkan tercapai, IP dikunci alih-alih mendapat kesempatan lagi. Riwayat mencantumkan setiap blokir aktif beserta nama pengguna yang dicoba, jumlah percobaan, dan kapan blokir berakhir, lengkap dengan tombol Buka blokir.
Untuk membatasi percobaan login di WordPress dan menghentikan brute force, hitung login gagal per IP lalu kunci IP itu sementara, misalnya 8 kegagalan dalam 5 menit berarti menunggu 15 menit. Kegagalan 2FA dan kata sandi aplikasi harus ikut dihitung, dan IP Anda sendiri masuk daftar izin. Batas Login ada di Hushfort Pro, add-on berbayar untuk Hushfort Security, plugin keamanan WordPress gratis.
Mengapa ini penting
Serangan brute force hanyalah soal kesabaran: coba satu kata sandi, salah, coba yang berikutnya. WordPress tidak keberatan. Ia akan menjawab seribu tebakan salah dari alamat yang sama sesopan tebakan pertama. Jika sebuah akun memakai kata sandi yang lemah atau dipakai ulang, tinggal soal waktu saja.
Batas login mengubah hitungannya. Jika sebuah IP hanya bisa mencoba beberapa kali sebelum harus menunggu lima belas menit, menebak kata sandi yang cukup baik butuh waktu bertahun-tahun, bukan berjam-jam. Batas ini juga menyelamatkan server Anda dari menampilkan halaman login berulang kali untuk bot.
Yang tidak dicakupnya sendirian. Penyerang yang menguasai ribuan alamat IP bisa mengirim beberapa tebakan dari masing-masing alamat. Karena itulah batas login paling efektif jika dipadukan dengan login dua faktor, yang membuat kata sandi hasil tebakan tidak berguna tanpa kodenya.
Kesalahan yang sering terjadi
- Hanya menghitung formulir login. Kata sandi juga bisa dicoba melalui
xmlrpc.php, melalui kata sandi aplikasi REST API, dan di langkah kode dua faktor. Jika semua itu tidak dihitung dalam batas, penyerang tinggal memakainya. Tutup juga login XML-RPC; lihat cara menonaktifkan XML-RPC dengan aman. - Membaca IP yang salah di belakang proxy. Jika situs Anda berada di belakang Cloudflare dan
plugin membaca alamat proxy, satu bot bisa membuat semua pengunjung terkunci. Sebaliknya, jika
plugin memercayai header
X-Forwarded-Forbegitu saja, bot bisa mengarang IP baru di setiap permintaan dan tidak pernah terhitung. Aturan amannya: percayai header proxy hanya jika permintaan benar-benar datang dari proxy. - Penguncian yang terlalu lama. Penguncian 24 jam karena tiga kali salah ketik menghukum staf Anda sendiri. Buat penguncian pertama singkat, dan perpanjang penguncian yang berulang.
- Tanpa daftar izin. Tambahkan IP tetap Anda sendiri agar kata sandi yang terlupa tidak pernah mengunci Anda di luar.
Tanpa plugin
WordPress punya hook, wp_login_failed, yang terpicu setelah setiap login gagal. Anda bisa
menghitung kegagalan dengan transient dan menolak login saat jumlahnya terlalu tinggi. Versi
minimal untuk plugin must-use (wp-content/mu-plugins/login-limit.php):
<?php
add_action( 'wp_login_failed', function () {
$key = 'll_' . md5( $_SERVER['REMOTE_ADDR'] );
$n = (int) get_transient( $key );
set_transient( $key, $n + 1, 15 * MINUTE_IN_SECONDS );
} );
add_filter( 'authenticate', function ( $user ) {
$key = 'll_' . md5( $_SERVER['REMOTE_ADDR'] );
if ( (int) get_transient( $key ) >= 8 ) {
return new WP_Error( 'too_many', 'Too many failed attempts. Try again later.' );
}
return $user;
}, 30 );
Kode ini berfungsi, tetapi akui saja kekurangannya: ia hanya membaca REMOTE_ADDR, jadi di
belakang proxy yang dihitung adalah proxy-nya; ia tidak menghitung tebakan multicall XML-RPC
sebagai percobaan terpisah; ia tidak punya daftar izin, email peringatan, maupun log. Masing-masing
berarti lebih banyak kode untuk ditulis dan dirawat.
Beberapa penyedia hosting juga menawarkan alat tingkat server seperti fail2ban yang memantau access log. Itu kuat jika penyedia hosting menjalankannya untuk Anda; di shared hosting biasanya Anda tidak bisa memasangnya sendiri.
Jika terjadi masalah
- Anda mengunci diri sendiri. Tunggu sampai penguncian berakhir, coba dari jaringan lain seperti data seluler, atau minta administrator lain menambahkan IP Anda ke daftar izin.
- Semua orang terkunci sekaligus. Situs Anda kemungkinan berada di belakang proxy dan plugin membaca IP proxy tersebut. Ubah pengaturan sumber IP.
- Penguncian tidak pernah terjadi. Periksa apakah sumber IP memercayai header yang bisa dipalsukan bot. Jika setiap percobaan menampilkan "IP" yang berbeda, itulah penyebabnya.
Untuk semua cara masuk kembali, lihat Terkunci di luar setelah mengubah URL login.
Dengan Hushfort
Batas Login adalah bagian dari Hushfort Pro, add-on yang dipasang di atas plugin gratis.
Lapisan Batas Login dari Hushfort menghitung login gagal per IP (atau per IP dan nama pengguna) dalam rentang waktu yang Anda pilih, dan mengunci IP tersebut selama waktu yang Anda pilih. Penguncian berulang dalam 24 jam dapat memicu penguncian panjang.
- Kode dua faktor yang gagal dan login kata sandi aplikasi yang gagal juga dihitung, jadi tidak ada pintu samping untuk menebak.
- Header proxy hanya dipercaya jika permintaan benar-benar datang dari Cloudflare atau jaringan privat.
- Email peringatan dikirim ke sebanyak mungkin alamat yang Anda cantumkan.
- Setiap percobaan yang gagal dan diblokir muncul di Riwayat yang bisa difilter.
- Daftar izin dipakai bersama oleh semua lapisan Hushfort lainnya, jadi Anda cukup menambahkan diri sekali.
Menonaktifkan Hushfort mencabut semua penguncian yang sedang berlaku.
Pertanyaan umum
Berapa banyak percobaan login yang sebaiknya diizinkan?
Apakah WordPress membatasi percobaan login secara bawaan?
Bisakah batas login mengunci saya dari situs saya sendiri?
Apakah membatasi percobaan login cukup untuk menghentikan brute force?
Mengapa penguncian mengenai orang yang salah di belakang Cloudflare?
Panduan terkait
Bagaimana cara menambahkan autentikasi dua faktor (2FA) ke WordPress?
Tambahkan langkah login kedua dengan aplikasi autentikator. Aktifkan 2FA di WordPress, simpan kode pemulihan, dan bersiap jika ponsel hilang.
Lihat langkah-langkahnyaApa itu xmlrpc.php, dan bagaimana cara menonaktifkan XML-RPC di WordPress?
xmlrpc.php adalah pintu login kedua yang tetap terbuka saat halaman login disembunyikan. Cara menonaktifkan XML-RPC dengan aman dan mengujinya.
Lihat langkah-langkahnyaBagaimana cara mengganti URL login WordPress (wp-login.php dan wp-admin)?
Ganti URL login WordPress dan sembunyikan wp-admin dalam lima langkah aman. Uji sebelum keluar, dan ketahui cara masuk kembali jika Anda lupa alamatnya.
Lihat langkah-langkahnya
