Keamanan & Siap Produksi

PreventRequestForgery Laravel 13, rate limiting, mode strict, hardening konfigurasi, optimasi, dan deployment.

Part 25 dari 26 ± 45 menit Gratis

Keamanan bawaan Laravel

Laravel melindungi dari banyak serangan umum secara default, selama kamu memakainya dengan benar:

AncamanPerlindungan
SQL injectionEloquent & query builder memakai prepared statement. Jangan menggabungkan input ke DB::raw() / whereRaw() tanpa binding.
XSS{{ }} di Blade otomatis di-escape. Hindari {!! !!} untuk input pengguna.
CSRFMiddleware PreventRequestForgery + @csrf pada form.
Mass assignment#[Fillable]/$fillable sebagai whitelist.
PasswordHash bcrypt/argon2 via Hash; cast hashed.
Session hijackingsession()->regenerate() saat login; cookie HttpOnly, SameSite.

CSRF di Laravel 13: PreventRequestForgery

Middleware CSRF dinamai ulang menjadi Illuminate\Foundation\Http\Middleware\PreventRequestForgery (nama lama VerifyCsrfToken tetap ada sebagai alias usang). Ia bekerja dua lapis: pertama memeriksa header Sec-Fetch-Site dari browser (asal permintaan); bila tidak lolos/tersedia, mundur ke validasi token CSRF klasik. Konfigurasi di bootstrap/app.php:

->withMiddleware(function (Middleware $middleware): void {
    $middleware->preventRequestForgery(except: [
        'webhook/*',            // mis. webhook pembayaran yang tak punya token
    ]);

    // mengandalkan verifikasi asal saja (gagal → 403, bukan 419):
    // $middleware->preventRequestForgery(originOnly: true);
    // mengizinkan subdomain yang sama situs:
    // $middleware->preventRequestForgery(allowSameSite: true);
})

Di tes, CSRF otomatis nonaktif. Tempatkan route webhook di luar grup web bila bisa (mis. di routes/api.php).

Rate limiting

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;

// AppServiceProvider::boot()
RateLimiter::for('login', function (Request $request) {
    return Limit::perMinute(5)->by($request->input('email') . $request->ip());
});

Route::post('/login', ...)->middleware('throttle:login');
Route::middleware('throttle:60,1')->group(...);         // 60 permintaan per menit

Melindungi dari brute force login, spam form, dan penyalahgunaan API. Respons yang ditolak: 429 Too Many Requests.

Mode strict di development

use Illuminate\Database\Eloquent\Model;

Model::shouldBeStrict(! app()->isProduction());     // lazy loading, atribut hilang, mass assignment diam-diam → exception

Perubahan keamanan Laravel 13 yang perlu diketahui

  • Cache: opsi serializable_classes bernilai false secara bawaan — mempersulit serangan PHP deserialization bila APP_KEY bocor. Simpan array alih-alih objek, atau daftarkan kelas yang diizinkan.
  • Session: serialization bawaan skeleton baru adalah json (bukan php) dengan alasan serupa. Mengubahnya pada aplikasi lama akan mengeluarkan semua pengguna yang sedang login.
  • Judul email reset password bawaan berubah menjadi "Reset your password".

Daftar periksa produksi

APP_ENV=production
APP_DEBUG=false          # JANGAN true di produksi: membocorkan stack trace & kredensial
APP_KEY=...              # php artisan key:generate (sekali, simpan aman)
php artisan config:cache && php artisan route:cache && php artisan view:cache   # atau: php artisan optimize
php artisan migrate --force
php artisan queue:restart
  • HTTPS wajib; paksa skema dengan URL::forceScheme('https') di produksi.
  • Folder web root = public/; berkas .env dan storage tidak boleh bisa diakses web.
  • Pasang worker queue di Supervisor, jadwalkan php artisan schedule:run tiap menit di cron.
  • Cadangkan database; pantau error (Nightwatch, Sentry, Flare) dan performa.
  • Pembaruan dependensi: composer audit, composer update terencana; baca upgrade guide tiap versi mayor.

Opsi deployment

OpsiKeterangan
Laravel CloudPlatform terkelola resmi: deploy dari Git, auto-scaling, database & cache terkelola
Laravel ForgeMengelola server (VPS) kamu: Nginx, PHP, SSL, deploy otomatis
Docker / Sail / KubernetesKontrol penuh & konsistensi lingkungan
Shared hosting / VPS manualMurah; butuh perawatan manual

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X