Lewati ke konten

Laravel Shieldv1.2.x

Menguji

Shield datang dalam mode yang aman untuk pengujian, dan ada perintah khusus untuk menguji rule tanpa menyentuh server produksi.

Uji di local atau environment staging. Menonaktifkan Shield di produksi sedang sibuk berarti membuka pintu tepat saat orang paling mungkin menyerang.

Cara paling aman. Shield mencatat tanpa memblokir siapa pun:

SHIELD_MODE=observe

Kirim request yang mencurigakan, lalu lihat hasilnya:

Terminal window
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.

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.

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.

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.

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.

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:

Terminal window
php artisan shield:replay tests/corpus.json

Perintah ini menghitung tingkat deteksi dan keluar dengan kode keluar sesuai target, --min-rate bawaannya 0,98. Ini cocok dipakai di CI:

Terminal window
php artisan shield:replay tests/corpus.json || exit 1

Untuk menguji perilaku paket WordPress tanpa menyalakannya di produksi:

Terminal window
php artisan shield:replay tests/corpus.json --pack-wordpress

Turunkan --min-rate kalau korpus Anda memang belum lengkap:

Terminal window
php artisan shield:replay tests/corpus.json --min-rate=0.90

shield:report adalah alat utama saat menyetel threshold. Yang paling berguna untuk ditinjau:

  1. Rule mana yang paling sering cocok tanpa alasan. Itu kandidat untuk diturunkan skornya atau dimatikan.
  2. Berapa challenge yang berubah jadi blokir. Kalau challenge sering berubah ke blockir, mungkin ambang challenge Anda terlalu rendah.
  3. Apakah ada IP sah yang kena. Kalau iya, periksa trusted proxy lebih dulu.

Untuk memfilter berdasarkan satu host:

Terminal window
php artisan shield:report --host=toko-online.test

Memastikan konfigurasi Anda benar-benar terpakai

Section titled “Memastikan konfigurasi Anda benar-benar terpakai”

Setelah mengubah config/shield.php dan di-cache:

Terminal window
php artisan config:clear
php artisan shield:rules:list

Kalau rule yang Anda sesuaikan tidak muncul dengan nilai yang benar, berarti konfigurasi Anda belum termuat — bukan berarti Shield mengabaikannya.

  • SHIELD_ENABLED=true di environment target
  • Scheduler Laravel berjalan (php artisan schedule:run tiap menit)
  • php artisan shield:health keluar bersih
  • php artisan shield:report sudah dibaca selama beberapa hari
  • Trusted proxy sudah dikonfigurasi kalau di belakang proxy
  • php artisan config:clear sudah dijalankan setelah mengubah config
  • Diff config/shield.php Anda dengan versi vendor sudah dibaca

Naikkan ke challenge, tunggu beberapa hari, periksa lagi, baru pertimbangkan enforce.

Powered by PT Ganadev Multi Solusi