Instalasi
Persyaratan: PHP ^8.2, Composer, Laravel 11/12/13 (diuji pada Laravel 12 & 13).
1. Pasang package
Section titled “1. Pasang package”composer require ganadev/laravel-shield:^1.2.2 ganadev/shield-core:^1.2.2laravel-shield otomatis menarik ganadev/shield-core. Provider terdaftar otomatis (auto-discovery).
Catatan: sudah punya versi
1.0.x? Baca Upgrade ke v1.2.2 lebih dulu — ada dua perubahan default dan satu validasi baru yang bisa membuat aplikasi gagal boot.
2. Publish aset
Section titled “2. Publish aset”php artisan vendor:publish --provider="Ganadev\Shield\Laravel\ShieldServiceProvider" --tag=shield-configphp artisan vendor:publish --provider="Ganadev\Shield\Laravel\ShieldServiceProvider" --tag=shield-migrationsphp artisan vendor:publish --provider="Ganadev\Shield\Laravel\ShieldServiceProvider" --tag=shield-views # opsionalphp artisan migrateshield-config→config/shield.phpshield-migrations→ tabelsecurity_ip_bans&security_eventsshield-views→ halaman brandedresources/views/vendor/shield/{blocked,challenge}.blade.php
Catatan:
config/shield.phphasil publish mengunci seluruh default di dalamnya.mergeConfigFromhanya mengisi kunci yang belum ada, jadi default baru di rilis berikutnya tidak masuk ke file ini. Saat upgrade, bandingkan file Anda denganvendor/ganadev/laravel-shield/config/shield.phpdan terapkan perubahannya manual.
3. Daftarkan middleware
Section titled “3. Daftarkan middleware”Pasang sebagai middleware global (bukan group web) supaya request ke path tanpa route (mis. /.env)
ikut diperiksa. Letakkan setelah resolusi trusted proxy:
->withMiddleware(function (Middleware $middleware): void { $middleware->append([ \Ganadev\Shield\Laravel\Middleware\SecurityFirewallMiddleware::class, ]);})4. Atur environment
Section titled “4. Atur environment”SHIELD_MODE=observe # mulai aman: catat dulu tanpa memblokirSHIELD_APP_ID=my-appSHIELD_CHALLENGE=turnstile # turnstile | recaptcha | null5. Trusted proxy & IP (penting di produksi)
Section titled “5. Trusted proxy & IP (penting di produksi)”Semua ban, challenge, dan penghitung berbasis IP klien. Jika di belakang load balancer / reverse proxy,
atur trusted proxies agar $request->ip() mengembalikan IP asli. Tanpa itu, semua pengguna terlihat satu IP
→ ban/challenge massal.
->withMiddleware(function (Middleware $middleware) { $middleware->trustProxies( at: '192.168.0.1,192.168.0.2', headers: Request::HEADER_X_FORWARDED_FOR, );})Sejak 1.2.0, kondisi ini juga memberi warning otomatis saat boot lewat logger()->warning() tanpa perlu
menjalankan perintah apa pun. Pesannya muncul kalau header forwarded terdeteksi tanpa trusted proxies, atau
app.url menunjuk host publik sementara mode adalah challenge/enforce. Kalau alert monitoring Anda menangkap
semua level log, tambahkan filter agar warning ini tidak berubah jadi noise.
php artisan shield:health tetap menyediakan pemeriksaan yang sama plus ringkasan komponen lain.
6. Jalankan
Section titled “6. Jalankan”php artisan serveGunakan php artisan shield:report untuk ringkasan event dan shield:health untuk cek komponen.
Rollout bertahap (disarankan)
Section titled “Rollout bertahap (disarankan)”- Mode
observe24–72 jam → pantaushield:report. - Aktifkan
enforceuntuk aturan critical dulu. - Aktifkan behavior challenge dengan threshold hati-hati.
- Aktifkan eskalasi ban setelah observasi.
- Pantau manual release & challenge pass rate sebagai tanda false-positive.
Powered by PT Ganadev Multi Solusi