Lewati ke konten

Laravel Shieldv1.2.x

Tanya jawab

Apakah Shield menggantikan firewall hosting?

Section titled “Apakah Shield menggantikan firewall hosting?”

Tidak. Keduanya di layer berbeda. Firewall hosting atau Cloudflare bekerja sebelum request sampai ke aplikasi; Shield bekerja setelah request sampai ke PHP, tapi sebelum controller. Shield menang dalam hal riwayat: ia tahu bahwa satu IP sudah mencoba 300 URL berbeda, bukan hanya bahwa URL ke-301 bermasalah.

Tidak, tapi fungsinya beririsan. Kalau Anda sudah punya WAF di CDN, Shield berguna sebagai lapisan kedua yang punya memori dan bisa membedakan pola perilaku dari signature statis.

Saya cuma belajar Laravel, apakah perlu ini?

Section titled “Saya cuma belajar Laravel, apakah perlu ini?”

Belum tentu perlu. Shield paling berguna saat aplikasi Anda sudah daring dan nilainya berarti. Untuk belajar di localhost, belum banyak gunanya.

Tapi memasang di mode observe itu murah dan aman: Shield hanya mencatat. Kalau Anda mau, pakai juga sebagai alat belajar — baca log-nya dan pahami kenapa request tertentu ditandai.

Kenapa default-nya observe, bukan langsung memblokir?

Section titled “Kenapa default-nya observe, bukan langsung memblokir?”

Karena kesalahan konfigurasi jauh lebih merusak daripada serangan yang lolos. Kalau ambang batas terlalu ketat, Anda memblokir pengguna asli dan tidak akan tahu selama berbulan-bulan. Kalau terlalu longgar, penyerang hanya perlu menambah upaya sedikit.

Jadi Shield mulai dengan menghitung, lalu Anda yang memutuskan.

Kenapa 404 dan bukan 403 untuk request yang diblokir?

Section titled “Kenapa 404 dan bukan 403 untuk request yang diblokir?”

Supaya penyerang tidak bisa memastikan ada atau tidaknya firewall di depan situs Anda. Dengan 404, request ke /.env dan request ke /halaman-yang-tidak-ada kelihatan sama saja.

Kalau Anda lebih suka kejelasan, ubah SHIELD_RESPONSE_CODE=403. Tapi jadi sedikit membocorkan informasi.

Alasannya sama: 429 memberi tahu penyerang bahwa ada sesuatu yang membatasi di depan situs. Kalau memang itu yang Anda inginkan, 429 juga sah sebagai nilai response_code.

Tidak. Yang disimpan adalah URL, User-Agent, referer, rule yang cocok, dan skornya. Body request tidak pernah ditulis ke database maupun log — hanya nama rule yang cocok. Ini supaya password dan data pribadi tidak bocor ke storage Anda sendiri.

Parameter query yang sensitif juga disamarkan jadi *** sebelum disimpan.

Ya, Shield sendiri tidak mengenakan biaya layanan. Cloudflare Turnstile punya kuota gratis yang jauh melebihi kebutuhan kebanyakan situs. Kalau kuota itu terlampaui, ganti ke recaptcha atau pakai mode challenge yang lebih jarang.

Saya di belakang Cloudflare, apakah harus mengonfigurasi proxy?

Section titled “Saya di belakang Cloudflare, apakah harus mengonfigurasi proxy?”

Ya. Ini bagian yang paling sering terlewat. Tanpa trusted proxy, Laravel melihat IP Cloudflare untuk semua orang. Akibatnya Shield bisa:

  • memblokir semua pengguna sekaligus,
  • memberi challenge massal,
  • salah menghitung rate limit.

Dan yang lebih buruk: penyerang cukup mengubah header X-Forwarded-For untuk menyembunyikan IP aslinya, sehingga seluruh proteksi berbasis IP jadi tidak berguna.

Petunjuk lengkapnya ada di Instalasi.

Kenapa tidak bisa pakai trustProxies(at: '*')?

Section titled “Kenapa tidak bisa pakai trustProxies(at: '*')?”

Karena itu berarti percaya header forwarded dari siapa saja, termasuk dari penyerang. Kalau aplikasi Anda bisa dijangkau langsung tanpa lewat proxy, satu header palsu sudah cukup untuk membuat Shield salah mengira IP mana.

Selalu tuliskan CIDR proxy yang Anda percaya.

Kenapa composer require gagal untuk 1.2.1?

Section titled “Kenapa composer require gagal untuk 1.2.1?”

Tag Git-nya dipindahkan, dan Packagist menolak tag yang dipindahkan. Pasang ^1.2.2. Penjelasan lengkapnya ada di Masalah umum.

Bisa, dan Anda tidak perlu mendaftarkan file terpisah. Tulis definisinya di config/shield.php dengan id yang baru, atau id yang sama untuk menimpa rule bawaan. Detailnya ada di Rules.

Bisakah saya mengecualikan path saya dari pemeriksaan?

Section titled “Bisakah saya mengecualikan path saya dari pemeriksaan?”

Bisa, lewat allowlist.paths. Tapi ada dua batasan penting: pencocokan menggunakan awalan, jadi '/admin' juga mencakup '/administrator'; dan allowlist tidak pernah melewati rule critical seperti /.env.

Untuk endpoint yang memang wajar mengirim payload yang terlihat berbahaya, lebih baik pakai rules.skip_paths — itu lebih sempit dan tetap menjaga signature di URI.

Kenapa semua orang dari IP yang sama kena challenge?

Section titled “Kenapa semua orang dari IP yang sama kena challenge?”

Karena rate limit Shield dihitung per IP. Kantor, kampus, dan jaringan seluler berbagi IP. Untuk kasus seperti itu, challenge lebih tepat daripada ban.

Apakah ini akan memblokir mesin telat indeks saya sendiri?

Section titled “Apakah ini akan memblokir mesin telat indeks saya sendiri?”

Tidak, asalkan Anda tidak melakukan kesalahan konfigurasi. Shield memverifikasi crawler lewat reverse-DNS dan CIDR, bukan sekadar percaya User-Agent. Isi bots.verification.ip_ranges untuk memastikan verifikasi tidak bergantung pada DNS.

Kalau Googlebot Anda benar-benar tersingkir, ada bagian khusus untuk itu di Bot dan crawler.

Untuk request normal: normalisasi URI dan pencocokan string. Murah.

Untuk request mencurigakan: satu pembacaan cache, dan kalau benar-benar perlu satu query database. Ban disimpan di cache 30 detik supaya tidak membebani database.

Dua opsi yang paling mempengaruhi performa: performance.max_uri_length dan decode_depth. Naikkan hanya kalau Anda tahu alasan Anda melakukannya.

Apakah saya bisa melihat apa yang terjadi?

Section titled “Apakah saya bisa melihat apa yang terjadi?”

Ya:

Terminal window
php artisan shield:health
php artisan shield:report

Atau nyalakan panel admin kalau Anda butuh melihatnya lewat browser. Detailnya ada di Admin API.

Kalau saya tidak suka, bagaimana melepasnya?

Section titled “Kalau saya tidak suka, bagaimana melepasnya?”

Hapus baris middleware dari bootstrap/app.php.\Data dan tabelnya tetap ada, tapi tidak ada lagi yang dicek. Anda juga bisa menyalakan SHIELD_ENABLED=false sebagai sakelar yang lebih halus.

Apakah ini cocok untuk aplikasi non-publik yang sensitif?

Section titled “Apakah ini cocok untuk aplikasi non-publik yang sensitif?”

Hapus baris middleware dari bootstrap/app.php. Data dan tabelnya tetap ada, tahu batasannya. Ringkasnya: Shield menahan serangan yang dikenal, bukan menggantikan validasi input, escaping, autentikasi, dan patch dependency.

Dua. ganadev/shield-core adalah mesinnya, dan ganadev/laravel-shield adalah adapter Laravel. Memasang laravel-shield otomatis menarik shield-core, jadi Anda tidak perlu memasang keduanya.

Kalau Anda cuma memakai Laravel, cukup pasang laravel-shield. Penjelasan lengkap tentang pemisahannya ada di Arsitektur Shield Core.

Powered by PT Ganadev Multi Solusi