Admin & CLI
Admin API (default nonaktif)
Section titled “Admin API (default nonaktif)”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.
Authorization gate
Section titled “Authorization gate”auth middleware saja berarti siapa pun yang login bisa mengelola ban. Untuk memperketat, set
admin.authorize (SHIELD_ADMIN_AUTHORIZE) ke nama Gate:
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.
Artisan commands
Section titled “Artisan commands”| 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. |
Replay (validasi rule)
Section titled “Replay (validasi rule)”php artisan shield:replay fixtures/waf-corpus.json --pack-wordpress# atau tanpa framework:php tools/replay.php --corpus=fixtures/waf-corpus.json --pack-wordpressHasil: tabel per-kategori, detection rate, dan jumlah false positive; exit 0 jika rate >= --min-rate dan
tidak ada false positive.
Scheduler (pruning otomatis)
Section titled “Scheduler (pruning otomatis)”use Illuminate\Support\Facades\Schedule;
Schedule::command('shield:prune --days=30')->daily();Alerting (event ShieldBlocked)
Section titled “Alerting (event ShieldBlocked)”Setiap request yang diblokir membangkitkan event Ganadev\Shield\Laravel\Events\ShieldBlocked
(ip, ruleId, reason, score, uri (dimasking), method). Daftarkan listener untuk Slack/Telegram/Email:
protected $listen = [ \Ganadev\Shield\Laravel\Events\ShieldBlocked::class => [ NotifySlackOnBlock::class, ],];Powered by PT Ganadev Multi Solusi