Instalasi
Panduan langkah demi langkah, dari composer require sampai filter
terpasang.
CodeIgniter 4 Shield adalah firewall di dalam aplikasi CodeIgniter 4 Anda. Begitu sebuah request masuk, Shield menilainya sebelum controller sempat berjalan, lalu membuat salah satu keputusan:
| Keputusan | Arti |
|---|---|
| Izinkan | Request normal, lanjut ke aplikasi. |
| Amati | Mencurigakan, tapi dicatat dulu tanpa mengganggu pengguna. |
| Challenge | Minta pengunjung membuktikan manusia dulu (Turnstile/reCAPTCHA). |
| Blokir | Request berbahaya, ditolak. |
| Ban | IP pelaku diblokir sementara; durasi mengikuti jumlah offense. |
Bedanya dengan WAF di depan server: Shield punya memori. Ia tahu bahwa satu IP sudah mencoba 300 URL berbeda dalam 60 detik, atau sudah tiga kali mencoba login gagal. WAF biasa hanya melihat request yang sedang lewat.
| Kebutuhan | Keterangan |
|---|---|
PHP ^8.2 |
Minimal. |
CodeIgniter 4 ^4.3 |
Baseline dokumentasi 4.7.5; 4.3–4.7.4 legacy. |
| Database | Untuk menyimpan ban dan catatan kejadian. MySQL, MariaDB, PostgreSQL, atau SQLite. |
| Akun Cloudflare atau Google | Hanya kalau Anda memakai challenge. |
composer require ganadev/codeigniter4-shieldLalu daftarkan service provider di app/Config/Events.php:
Events::on('pre_system', static function (): void { \Ganadev\Shield\Codeigniter\ShieldServiceProvider::register();});Untuk aplikasi publik, jangan berhenti di provider saja. Instalasi default
memasang ShieldGateFilter di required['before'] agar request 404/scanner
diperiksa sebelum router. Langkah lengkapnya ada di
Instalasi.
Setelah gate terpasang, jalankan migrasi:
php spark migrate --allItu dia — dalam mode bawaan, Shield hanya mencatat dan belum memblokir apa pun. Aman untuk dipasang di aplikasi yang sedang berjalan.
Tanpa baris Events::on(...) di atas, Shield tetap bisa berjalan memakai
fallback internal, tetapi service, alias filter, dan filter default tidak
terpasang. Perintah php spark shield:* tetap ditemukan otomatis dari
namespace PSR-4 package, jadi perintah tidak bergantung pada baris tersebut.
Provider menempatkan filter default di globals['before'], yang berjalan
setelah router. Instalasi default memindahkannya ke required['before'] lewat
ShieldGateFilter agar path tanpa route (seperti /.env) juga diperiksa.
Detailnya ada di
Registrasi & Urutan Filter.
File sensitif. Permintaan seperti /.env, /.git/config,
/.aws/credentials, wp-config.php, file backup .php.bak, sampai file .php
yang muncul di dalam folder upload dikenali. Pada mode challenge atau
enforce, request-nya diblokir; pada observe hanya dicatat.
Pemeriksaan path yang tidak punya route seperti /.env memerlukan setup
required['before'] + ShieldGateFilter. Pada registrasi default, request itu
tidak sampai ke filter karena router sudah lebih dulu melempar 404 — lihat
Registrasi & Urutan Filter.
Path traversal. Bukan hanya ../, tapi juga versi yang di-encode: %2e%2e,
dan yang di-encode dua kali %252e%252e%252f. Targetnya /etc/passwd dan
/proc/self/environ.
Serangan SQLi, XSS, dan command injection. Biasanya WAF hanya melihat URL.
Shield juga membaca body request — termasuk application/json — lalu
mencari union select, <script, php://input, eval(, dan sebagainya.
Penelahan (enumeration). Bot yang mencoba ratusan URL berbeda dalam 60
detik, atau yang membanjiri /login dengan ratusan percobaan. Deretan request
yang berakhir 404 juga dihitung — termasuk 404 sebelum router jika Anda memakai
setup required['before']. Tanpa setup itu, hanya 404 dari route yang berjalan
yang tercatat.
Bot palsu. Siapa pun bisa mengirim User-Agent: Googlebot. Shield
memverifikasi klaim crawler lewat reverse DNS/IP; pada mode challenge atau
enforce, klaim palsu dapat di-challenge atau diblokir. Pada mode observe
(default), Shield hanya mencatat agar Anda bisa menilai hasilnya dulu.
observe. Shield secara bawaan hanya mencatat dan belum
memblokir. Biarkan 1–3 hari, lalu baca
shield:report untuk memastikan tidak ada
yang salah sasaran.proxyIPs kalau ada proxy. Kalau aplikasi di belakang Cloudflare
atau load balancer tanpa pengaturan ini, semua pengguna terlihat berasal dari
satu IP — dan Anda akan memblokir orang banyak sekaligus.shield:prune via cron. Supaya tabel catatan kejadian tidak
tumbuh tanpa batas.Ketiganya dijelaskan di Instalasi.
Instalasi
Panduan langkah demi langkah, dari composer require sampai filter
terpasang.
Masalah Umum
Gejala, penyebab, dan perbaikannya.
Registrasi & Filter
Urutan filter, setup sebelum router, dan counter halaman publik. Baca panduannya.
Konfigurasi
Semua kunci konfigurasi, lengkap dengan nilai default-nya.
Powered by PT Ganadev Multi Solusi