Laravel Shieldv1.2.x
Menguji
Shield datang dalam mode yang aman untuk pengujian, dan ada perintah khusus untuk menguji rule tanpa menyentuh server produksi.
Aturan pertama: jangan uji di produksi
Section titled “Aturan pertama: jangan uji di produksi”Uji di local atau environment staging. Menonaktifkan Shield di produksi
sedang sibuk berarti membuka pintu tepat saat orang paling mungkin
menyerang.
Uji manual dengan mode: observe
Section titled “Uji manual dengan mode: observe”Cara paling aman. Shield mencatat tanpa memblokir siapa pun:
SHIELD_MODE=observeKirim request yang mencurigakan, lalu lihat hasilnya:
curl -i "http://localhost:8000/.env"curl -i "http://localhost:8000/?id=1%20union%20select%20username,password%20from%20users"curl -i "http://localhost:8000/?q=<script>alert(1)</script>"Yang perlu Anda perhatikan bukan kode responsnya, melainkan alasan keputusan
itu. Di observe, respons tetap 200, tapi baris di log akan menunjukkan
rule_id yang cocok.
Uji terotomatisasi di test Laravel
Section titled “Uji terotomatisasi di test Laravel”Karena Shield adalah middleware global, dia ikut jalan di test. Kalau test Anda mulai gagal karena Shield, itu bukan bug — itu tanda middleware-nya belum benar dipasang.
Matikan Shield di environment test
Section titled “Matikan Shield di environment test”Cara paling bersih adalah lewat phpunit.xml:
<env name="SHIELD_ENABLED" value="false"/>Alternatifnya, kalau Anda justru ingin Shield aktif di test, pastikan mode-nya benign:
<env name="SHIELD_MODE" value="observe"/><env name="SHIELD_CHALLENGE" value="null"/>SHIELD_CHALLENGE=null penting: tanpa itu, test yang mengirim banyak request
akan memicu rate limit perilaku dan memblokir IP test Anda sendiri.
Uji bahwa blokir bekerja
Section titled “Uji bahwa blokir bekerja”public function test_env_probe_is_blocked(): void{ config(['shield.mode' => 'enforce']);
$this->get('/.env') ->assertStatus(404) ->assertHeader('X-Shield-Blocked');}Status 404 bukan salah. Shield memakai response_code default supaya penyerang
tidak bisa memastikan ada atau tidaknya firewall di depan aplikasi Anda.
Uji challenge tanpa pihak ketiga
Section titled “Uji challenge tanpa pihak ketiga”public function test_challenge_accepts_test_token(): void{ config(['shield.mode' => 'challenge']);
$this->post('/shield/challenge/verify', [ 'shield_challenge_token' => 'test-token', 'redirect' => '/', ])->assertRedirect('/');}Token test-token hanya berlaku kalau driver-nya null. Jangan pakai ini di
environment yang bisa diakses publik.
Menguji rule dengan shield:replay
Section titled “Menguji rule dengan shield:replay”Kalau Anda mengubah rule, cara paling aman memvalidasinya adalah memutar ulang korpus serangan melalui mesin yang sama.
Siapkan file JSON berisi payload dan hasil yang diharapkan, lalu:
php artisan shield:replay tests/corpus.jsonPerintah ini menghitung tingkat deteksi dan keluar dengan kode keluar
sesuai target, --min-rate bawaannya 0,98. Ini cocok dipakai di CI:
php artisan shield:replay tests/corpus.json || exit 1Untuk menguji perilaku paket WordPress tanpa menyalakannya di produksi:
php artisan shield:replay tests/corpus.json --pack-wordpressTurunkan --min-rate kalau korpus Anda memang belum lengkap:
php artisan shield:replay tests/corpus.json --min-rate=0.90Membaca hasil
Section titled “Membaca hasil”shield:report adalah alat utama saat menyetel threshold. Yang paling berguna
untuk ditinjau:
- Rule mana yang paling sering cocok tanpa alasan. Itu kandidat untuk diturunkan skornya atau dimatikan.
- Berapa challenge yang berubah jadi blokir. Kalau challenge sering berubah
ke blockir, mungkin ambang
challengeAnda terlalu rendah. - Apakah ada IP sah yang kena. Kalau iya, periksa trusted proxy lebih dulu.
Untuk memfilter berdasarkan satu host:
php artisan shield:report --host=toko-online.testMemastikan konfigurasi Anda benar-benar terpakai
Section titled “Memastikan konfigurasi Anda benar-benar terpakai”Setelah mengubah config/shield.php dan di-cache:
php artisan config:clearphp artisan shield:rules:listKalau rule yang Anda sesuaikan tidak muncul dengan nilai yang benar, berarti konfigurasi Anda belum termuat — bukan berarti Shield mengabaikannya.
Checklist sebelum naik ke challenge
Section titled “Checklist sebelum naik ke challenge”-
SHIELD_ENABLED=truedi environment target - Scheduler Laravel berjalan (
php artisan schedule:runtiap menit) -
php artisan shield:healthkeluar bersih -
php artisan shield:reportsudah dibaca selama beberapa hari - Trusted proxy sudah dikonfigurasi kalau di belakang proxy
-
php artisan config:clearsudah dijalankan setelah mengubah config - Diff
config/shield.phpAnda dengan versi vendor sudah dibaca
Naikkan ke challenge, tunggu beberapa hari, periksa lagi, baru pertimbangkan
enforce.
Powered by PT Ganadev Multi Solusi