CodeIgniter 4 Shieldv1.2.x
Environment & .env
Shield memakai config class yang mewarisi CodeIgniter\Config\BaseConfig. Artinya
CodeIgniter 4 sudah memetakan variabel .env ke properti config secara otomatis.
Anda tidak perlu memanggil env() di deklarasi properti.
Cara kerja singkat
Section titled “Cara kerja singkat”Saat config('Shield') dipanggil:
- Paket memakai
app/Config/Shield.phpjika ada. - Jika tidak ada, paket memakai config bawaannya.
BaseConfigmencari variabel.envyang cocok dan mengganti properti bertipe scalar.- Nilai dari
.envmenang atas nilai di config class.
Karena class bernama Shield, prefix pendeknya adalah shield (huruf kecil).
Anda bisa memakai titik atau garis bawah:
shield.mode = observeshield.appId = toko-onlineshield.thresholdChallenge = 10Atau bentuk underscore:
shield_mode = observeshield_appId = toko-onlineshield_thresholdChallenge = 10Aturan penamaan
Section titled “Aturan penamaan”- Prefix dan nama properti case-sensitive di Linux.
- Gunakan nama properti persis seperti di class:
thresholdChallenge, bukanthreshold_challengeatauTHRESHOLD_CHALLENGE. SHIELD_MODE,SHIELD_APP_ID, dan uppercaseSHIELD_*lain tidak dibaca otomatis untuk properti config. Ganti menjadishield_mode,shield_appId, dan seterusnya..envhanya mengganti properti scalar yang sudah ada. Anda tidak bisa menambah properti baru atau mengubah scalar menjadi array lewat.env. Untuk array sepertisensitivePathsatauallowlistIps, tulis di config class.
Pengecualian: kunci challenge dibaca langsung oleh paket dengan getenv() dan
tetap memakai nama uppercase:
SHIELD_TURNSTILE_SITE_KEY=0x4AAAAAAA...SHIELD_TURNSTILE_SECRET_KEY=0x4AAAAAAA...SHIELD_RECAPTCHA_SITE_KEY=...SHIELD_RECAPTCHA_SECRET_KEY=...SHIELD_TURNSTILE_VERIFY_URL dan SHIELD_RECAPTCHA_VERIFY_URL juga dibaca
langsung jika Anda perlu mengganti endpoint verifikasi.
Config class (opsional)
Section titled “Config class (opsional)”Buat app/Config/Shield.php hanya jika Anda ingin mengubah nilai default.
Warisi config paket, lalu tulis properti yang ingin diubah:
<?php
namespace Config;
class Shield extends \Ganadev\Shield\Codeigniter\Config\Shield{ public string $appId = 'toko-online'; public string $challengeDriver = 'turnstile';
public array $sensitivePaths = [ '/login', '/admin/login', '/api/auth', ];}Tidak perlu menulis ulang semua properti. Nilai yang tidak diubah tetap memakai
default paket. Jangan extends CodeIgniter\Config\BaseConfig langsung; Anda akan
kehilangan default Shield.
Contoh .env minimal
Section titled “Contoh .env minimal”shield_mode = observeshield_appId = toko-onlineshield_thresholdChallenge = 10
SHIELD_TURNSTILE_SITE_KEY=0x4AAAAAAA...SHIELD_TURNSTILE_SECRET_KEY=0x4AAAAAAA...Untuk development tanpa challenge, gunakan driver null:
shield_challengeDriver = nullNilai null, test, 0, atau string kosong memakai NullTestDriver. Nilai
driver yang tidak dikenal tidak melempar error; Shield jatuh ke Turnstile.
Config cache
Section titled “Config cache”Jika configCacheEnabled aktif di app/Config/Optimize.php, perubahan .env
tidak langsung terlihat. Nonaktifkan selama development:
public bool $configCacheEnabled = false;public bool $locatorCacheEnabled = false;Di produksi, cache boleh aktif, tetapi hapus cache setiap kali .env atau
config class berubah.
Batas yang perlu diketahui
Section titled “Batas yang perlu diketahui”- Filter firewall hanya menerima path, bukan query string.
- Path yang tidak cocok dengan route tidak melewati filter
globals['before']. Untuk memeriksanya sebelum router, gunakan setuprequired['before']+ShieldGateFilterdi Registrasi & Urutan Filter. - Cookie challenge selalu memakai
secure: true; challenge lewat HTTP murni dapat memicuSecurityException. shield_modehanya menerimaobserve,challenge, atauenforce. Nilai lain tidak diabaikan diam-diam: saat engine dibangun,ShieldConfigmelemparInvalidConfigException. Pastikan ejaannya benar.
Checklist produksi
Section titled “Checklist produksi”-
shield_mode = enforcesetelah masa observasi. -
shield_appIdunik untuk tiap aplikasi. -
Config\App::$proxyIPsberisi CIDR proxy yang benar (array asosiatif, bukan'*'). - Kunci Turnstile/reCAPTCHA terisi. Gunakan driver null hanya di development/test.
-
shield_challengeDriverdieja benar; typo akan jatuh ke Turnstile. - Config cache dihapus setelah perubahan
.env. -
php spark shield:healthberhasil. -
php spark shield:pruneterjadwal. - Jika admin diaktifkan,
adminAuthorizetidak kosong. - Aplikasi berjalan di HTTPS.
Powered by PT Ganadev Multi Solusi