Lewati ke konten

Admin & CLI

Aktifkan admin.enabled = true (SHIELD_ADMIN_ENABLED). Semua route memakai admin.middleware (default ['web','auth']) dan CSRF untuk web routes.

Route Method Fungsi
/{prefix}/bans GET Daftar/filter ban.
/{prefix}/bans/{id} GET Detail ban.
/{prefix}/bans/{id}/release POST Manual unblock.
/{prefix}/bans/{id}/extend POST Perpanjang ban.
/{prefix}/events GET Filter event.
/{prefix}/rules GET Lihat rule yang dimuat.
/{prefix}/health GET Cek komponen (DB/cache).

Prefix default shield.

auth middleware saja berarti siapa pun yang login bisa mengelola ban. Untuk memperketat, set admin.authorize (SHIELD_ADMIN_AUTHORIZE) ke nama Gate:

app/Providers/AppServiceProvider.php
Gate::define('shield.manage', fn ($user) => $user->is_admin);

Saat diisi, setiap aksi admin memanggil $user->can('shield.manage'); gagal → 403. Release/extend mencatat actor untuk audit.

Perintah Fungsi
shield:report [--host=] Ringkasan event, blokir, offender unik, top rule.
shield:rules:list [--disabled] Daftar rule yang dimuat + state.
shield:release {ip} [--reason=] Rilis ban untuk IP.
shield:prune [--days=30] Bersihkan event lama & ban basi (default dari logging.retention_days).
shield:health Cek DB, cache, engine, trusted proxy.
shield:replay {file} [--pack-wordpress] [--min-rate=0.98] Replay corpus/export event terhadap rule.
Terminal window
php artisan shield:replay fixtures/waf-corpus.json --pack-wordpress
# atau tanpa framework:
php tools/replay.php --corpus=fixtures/waf-corpus.json --pack-wordpress

Hasil: tabel per-kategori, detection rate, dan jumlah false positive; exit 0 jika rate >= --min-rate dan tidak ada false positive.

use Illuminate\Support\Facades\Schedule;
Schedule::command('shield:prune --days=30')->daily();

Setiap request yang diblokir membangkitkan event Ganadev\Shield\Laravel\Events\ShieldBlocked (ip, ruleId, reason, score, uri (dimasking), method). Daftarkan listener untuk Slack/Telegram/Email:

app/Providers/EventServiceProvider.php
protected $listen = [
\Ganadev\Shield\Laravel\Events\ShieldBlocked::class => [
NotifySlackOnBlock::class,
],
];

Powered by PT Ganadev Multi Solusi