Lewati ke konten

Challenge & Trusted Cookie

IP yang dicurigai/banned mengakses route normal → middleware mengarahkan ke /shield/challenge → pengunjung menyelesaikan widget (Turnstile/reCAPTCHA) atau menekan Verify (driver null) → server memverifikasi → ban dirilis + cookie trusted diterbitkan → redirect balik.

Path critical tidak pernah diberi challenge — langsung diblok.

Dikontrol challenge.driver (SHIELD_CHALLENGE).

Driver Nilai Tampilan Catatan
Cloudflare Turnstile turnstile (default) Widget Cloudflare Wajib site+secret key; verifikasi server-side.
Google reCAPTCHA recaptcha / google_recaptcha Checkbox Wajib site+secret key; verifikasi server-side.
Null/Test null / test Form + tombol Verify Untuk tes/offline; token test-token selalu lulus.

Test key resmi (tanpa akun): Turnstile 3x00000000000000000000FF (interactive) / 1x00000000000000000000AA (always pass); reCAPTCHA 6LeIxAcTAAAA... / 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe.

  • ChallengeController::verify memanggil driver → provider memverifikasi token.
  • Token provider umumnya single-use (anti-replay).
  • Endpoint verify di-rate-limit (throttle:10,1) dan dilindungi CSRF (group web).
  • Redirect setelah sukses dibatasi ke path relatif same-origin (anti open-redirect, termasuk backslash/%5c/%2f).
  • Middleware mengirim param redirect sebagai path relatif (/home, bukan URL penuh) → user kembali ke halaman asal yang benar.
  • Enkripsi (mengikuti APP_KEY), HttpOnly, Secure, SameSite=Lax.
  • TTL default trusted.ttl_minutes (60).
  • Terikat ringan ke hash User-Agent + prefix IP kasar (IPv4 /24, IPv6 /64) — user sah di belakang NAT tidak terus-menerus ditantang.
  • Tidak pernah menjadi bypass untuk rule critical.
  • Cookie invalid/expired → diperlakukan sebagai tidak trusted.
  • Halaman adalah Blade view (shield::challenge, shield::blocked) bertema dark cyber, self-contained.
  • Publikasikan dengan --tag=shield-views untuk mengedit, atau ubah branding via branding.*.
  • Widget memakai callback onChallengeSolved(token) yang menyalin token ke shield_challenge_token lalu submit — halaman tidak menggantung setelah widget diselesaikan.

Powered by PT Ganadev Multi Solusi