Lewati ke konten

Laravel Shieldv1.2.x

Ban

Ban adalah keputusan paling berat yang bisa dibuat Shield: IP pelaku dikecualikan selama beberapa menit sampai beberapa hari.

Ban muncul dari tiga arah berbeda.

Kalau skor total melewati thresholds.ban (default 20) atau thresholds.strong_ban (default 30), Shield memban.

Beberapa rule ditandai immediate_ban: true, jadi request yang cocok diblokir tanpa perlu melihat skor. sensitive.env termasuk kategori ini.

Ini yang sering mengejutkan orang. Kalau sebuah IP sedang diban, setiap request berikutnya dari IP itu akan di-challenge — meskipun request barunya terlihat biasa saja.

Jadi orang yang tadi mencoba 30 URL berbeda, lalu kembali sepuluh menit kemudian, masih bertemu halaman challenge.

config/shield.php
'ban' => [
'durations' => [15, 60, 360, 1440], // dalam menit
],

Nilai pertama dipakai untuk offense ke-1, kedua untuk ke-2, dan seterusnya:

Offense Durasi
1 15 menit
2 1 jam
3 6 jam
4 24 jam
5 ke atas 24 jam, plus penanda manual_review

Kalau daftar Anda lebih pendek, nilai terakhir dipakai terus-menerus. Kalau lebih panjang, hanya lima offense pertama yang dihitung karena eskalasi dibatasi di lima.

'escalation' => [
'step' => 5,
],

Setiap offense menambah 5 poin ke skor request tersebut. Orang ketiga yang masih mencoba akan punya skor lebih tinggi daripada orang yang baru pertama kali menyerang. Akibatnya, yang terus mencoba makin cepat diblokir.

Kenapa request biasa tidak dihitung sebagai offense

Section titled “Kenapa request biasa tidak dihitung sebagai offense”

Syaratnya harus salah satu dari ini terpenuhi:

  • ada rule yang cocok, atau
  • total sinyal perilaku minimal 10.

Request normal tidak menambah offense sama sekali. Kalau tidak begini, setiap pengunjung bisa kena ban hanya karena sedang memakai situs Anda.

Riwayat offense tidak dihapus ketika ban berakhir. Masa tenang membuat angka turun:

Yang dilupakan Seberapa cepat
Jumlah offense Turun 1 setiap 24 jam tanpa aktivitas.
Skor risiko Turun 10 setiap 1 jam tanpa aktivitas.

Jadi orang yang mencoba sekali lalu menghilang seminggu, kembali dengan jumlah offense yang jauh lebih rendah daripada saat pertama kejadian. Kedua nilai ini tidak pernah turun di bawah nol.

Terminal window
php artisan shield:release 203.0.113.10

Sertakan alasannya:

Terminal window
php artisan shield:release 203.0.113.10 --reason="pelanggan salah ketik"

Alasannya ikut tersimpan di riwayat, jadi tim Anda bisa melihat kenapa ban dilepas.

Kalau admin.enabled aktif, buka /shield/bans, cari IP-nya, lalu tekan Release.

SHIELD_BAN_CACHE_TTL=30

Ban aktif disimpan di cache 30 detik supaya pengecekan tidak membebani database. Konsekuensinya: setelah shield:release, ban bisa masih aktif sampai 30 detik. Untuk mengosongkan cache dengan segera:

Terminal window
php artisan cache:clear

Penanda ini muncul otomatis pada offense ke-5 dan seterusnya. Ban tetap berjalan seperti biasa — manual review adalah penanda untuk Anda periksa, bukan tindakan otomatis.

Pantau lewat:

Terminal window
php artisan shield:report

Urutan tindakan, dari yang paling tidak berisiko:

  1. Naikkan mode ke observe sementara. Semua ban baru berhenti tanpa menghapus data.
  2. Baca report. Cari rule yang paling sering menyala tanpa alasan.
  3. Turunkan score rule itu, atau set enabled: false.
  4. Tambahkan rules.skip_paths kalau masalahnya hanya di endpoint tertentu.
  5. Naikkan ban.durations, jangan menghapus eskalasinya.
  6. Terakhir, pakai allowlist.paths untuk path tertentu. Ingat, allowlist tidak pernah melewati aturan critical.

Jangan pernah menyelesaikan false positive dengan allowlist.ips yang cakupannya luas. Itu mematikan seluruh proteksi untuk semua orang di dalam jaringan itu.

Penyebabnya hampir selalu salah satu dari dua hal:

  1. Trusted proxy belum diatur. Semua orang terlihat datang dari satu IP proxy. Perbaiki di Instalasi.
  2. IP memang dipakai banyak orang. Kantor, kampus, atau jaringan seluler berbagi IP. Untuk kasus ini, challenge lebih tepat daripada ban.

Kalau Anda di belakang Cloudflare, pastikan bots.verification.ip_ranges sudah diisi juga, supaya Cloudflare sendiri tidak ikut kena ban.

Powered by PT Ganadev Multi Solusi