Skip to content

Day 29 โ€” Keamanan Dasar & Optimasi Production โ€‹

Fase: 3 โ€” Deployment | Minggu: 6 | Hari: Kamis


๐ŸŽฏ Tujuan Hari Ini โ€‹

  • Melakukan audit keamanan dasar pada aplikasi SIMAS sebelum demo akhir.
  • Menjalankan perintah optimasi cache Laravel untuk meningkatkan performa.
  • Memahami cara membaca log error Laravel di production.
  • Memastikan aplikasi siap untuk presentasi esok hari.

๐Ÿ” Bagian 1: Keamanan Dasar Aplikasi Laravel โ€‹

Laravel sudah menyediakan banyak perlindungan secara bawaan. Tugasmu hari ini adalah memverifikasi semua perlindungan itu sudah aktif.

1.1 โ€” Pastikan APP_DEBUG=false di Production โ€‹

Ini sudah kita bahas di Day 26, tapi wajib diverifikasi kembali. Cek di Railway Variables.

1.2 โ€” Proteksi CSRF (Cross-Site Request Forgery) โ€‹

Laravel otomatis melindungi semua form POST dari serangan CSRF melalui @csrf directive di Blade. Lakukan audit:

bash
# Cari semua form POST di project yang mungkin lupa @csrf
grep -rn --include="*.blade.php" "method=\"POST\"" resources/views/ | grep -v "@csrf"

Setiap form dengan method="POST" WAJIB memiliki @csrf.

1.3 โ€” Validasi Input Wajib Ada di Controller โ€‹

Cek bahwa semua method store() dan update() menggunakan $request->validate(). Jangan pernah menyimpan data mentah dari user langsung ke database.

BAD โŒ:

php
Asset::create($request->all()); // BAHAYA! Mass assignment tanpa filter

GOOD โœ…:

php
$validated = $request->validate([...]);
Asset::create($validated);

1.4 โ€” Proteksi Hapus Data (Destructive Actions) โ€‹

Pastikan tombol "Hapus" menggunakan form POST dengan method spoofing @method('DELETE'), bukan link GET:

html
{{-- BENAR: Menggunakan form POST --}}
<form action="{{ route('assets.destroy', $asset) }}" method="POST"
      onsubmit="return confirm('Yakin ingin menghapus aset ini?')">
    @csrf
    @method('DELETE')
    <button type="submit" class="btn btn-danger btn-sm">Hapus</button>
</form>
html
{{-- SALAH: Menggunakan link GET โ€” bisa dieksploitasi --}}
<a href="/assets/{{ $asset->id }}/delete">Hapus</a>

โšก Bagian 2: Optimasi Performa Production โ€‹

Laravel menyediakan perintah caching yang membuat aplikasi berjalan jauh lebih cepat di production.

2.1 โ€” Jalankan Perintah Optimasi โ€‹

bash
# Cache konfigurasi (gabungkan semua config ke satu file)
php artisan config:cache

# Cache route (compile semua route ke satu file)
php artisan route:cache

# Cache view Blade (compile semua view ke PHP)
php artisan view:cache

# Atau jalankan ketiganya sekaligus:
php artisan optimize

2.2 โ€” Kapan Menjalankan Optimize? โ€‹

KapanPerintah
Setelah deploy ke productionphp artisan optimize
Saat development (ubah file)php artisan optimize:clear
Ubah .env di productionphp artisan config:clear

WARNING

Jangan jalankan config:cache atau route:cache di environment development! Ketika cache aktif, perubahan pada file config atau route tidak akan langsung terlihat โ€” kamu harus clear cache dulu. Ini sumber kebingungan yang sering dialami developer baru.

2.3 โ€” Tambahkan ke Startup Command Railway โ€‹

Update railway.json untuk menjalankan optimize setelah deploy:

json
{
  "deploy": {
    "startCommand": "php artisan migrate --force && php artisan storage:link && php artisan optimize && php artisan serve --host=0.0.0.0 --port=$PORT"
  }
}

๐Ÿ“‹ Bagian 3: Membaca Log Error Laravel โ€‹

Ketika APP_DEBUG=false, error tidak tampil di browser โ€” tapi dicatat di log file.

Lokasi Log di Development (Laptop) โ€‹

storage/logs/laravel.log

Cara Membaca Log di Railway โ€‹

  1. Buka dashboard Railway โ†’ service aplikasi
  2. Tab "Logs" โ†’ lihat output realtime
  3. Gunakan filter untuk mencari error tertentu

Format Log Laravel โ€‹

[2026-04-01 08:30:00] production.ERROR: SQLSTATE[42S02] Table 'simas.loans' doesn't exist
  at /var/www/html/vendor/laravel/framework/src/...
  {
    "exception": "[object] (Illuminate\Database\QueryException ...)"
  }

Bagian penting yang harus dibaca:

  • Level: ERROR, WARNING, INFO, DEBUG
  • Pesan: Deskripsi error (biasanya sudah cukup jelas)
  • Context: JSON di bawahnya berisi detail tambahan

๐Ÿงช Checklist Audit Keamanan & Optimasi โ€‹

Jalankan audit berikut dan beri tanda centang:

Item PemeriksaanStatus
APP_DEBUG=false di environment productionโฌœ
Semua form POST memiliki @csrfโฌœ
Semua store() dan update() menggunakan validate()โฌœ
Tombol hapus menggunakan form POST (bukan link GET)โฌœ
File .env tidak ter-commit ke GitHubโฌœ
php artisan optimize berhasil dijalankanโฌœ
Tidak ada error di log setelah optimizeโฌœ

๐ŸŽฏ Persiapan Final untuk Demo Besok โ€‹

Akhiri hari ini dengan melakukan persiapan demo:

  1. Isi data demo di database production:

    • Minimal 3 kategori aset
    • Minimal 8 aset (beberapa dengan foto, beberapa tanpa)
    • Minimal 5 data peminjaman (campuran pending dan returned)
  2. Test alur demo sekali dari awal ke akhir di URL production.

  3. Siapkan slide presentasi (Google Slides / PowerPoint) dengan poin:

    • Pengenalan tim dan aplikasi
    • Demo fitur-fitur utama (termasuk upload dan export)
    • Challenge yang dihadapi dan cara mengatasinya
    • URL aplikasi production yang bisa dikunjungi audience
  4. Tentukan urutan presenter untuk besok.

TIP

Lakukan demo dari URL production, bukan dari localhost. Ini menunjukkan bahwa aplikasimu benar-benar live dan bisa diakses siapapun โ€” itulah poin yang paling mengesankan di mata mentor.

Program Magang SMK RPL โ€” Rekayasa Perangkat Lunak (2 Bulan)