Mengatasi Composer Security Vulnerabilities di Laravel 12 + Filament v5 dengan Aman
Mengatasi Composer Security Vulnerabilities di Laravel 12 + Filament v5 dengan Aman
Tujuan
Melakukan update dependency untuk menghilangkan seluruh Composer Security Advisories tanpa mengganggu aplikasi production.
Target:
- ✅ No Security Vulnerabilities
- ✅ Aplikasi tetap berjalan
- ✅ Test berhasil
- ✅ Aman untuk deployment
1. Cek Vulnerability
Lakukan audit terlebih dahulu.
composer audit
Contoh hasil awal:
Found 37 security vulnerability advisories affecting 16 packages
Jangan langsung menjalankan:
composer update
Karena akan meng-update seluruh dependency dan berpotensi menimbulkan breaking change.
2. Buat Branch Khusus
Selalu buat branch baru.
git checkout -b fix/security-dependencies
Tujuannya:
- jika update gagal bisa dibatalkan
- branch main tetap aman
- mudah melakukan review melalui Pull Request
3. Lakukan Dry Run
Gunakan dry-run terlebih dahulu.
Misalnya:
composer update \
filament/filament \
filament/actions \
filament/forms \
filament/infolists \
filament/notifications \
filament/query-builder \
filament/schemas \
filament/support \
filament/tables \
filament/widgets \
laravel/framework \
guzzlehttp/guzzle \
guzzlehttp/psr7 \
--with-all-dependencies \
--minimal-changes \
--dry-run
Perhatikan:
- package yang berubah
- apakah Livewire ikut berubah
- apakah Symfony berubah major version
Jika masih aman lanjutkan tanpa --dry-run.
4. Jalankan Update
composer update \
filament/filament \
filament/actions \
filament/forms \
filament/infolists \
filament/notifications \
filament/query-builder \
filament/schemas \
filament/support \
filament/tables \
filament/widgets \
laravel/framework \
guzzlehttp/guzzle \
guzzlehttp/psr7 \
--with-all-dependencies \
--minimal-changes
5. Audit Kembali
composer audit
Jika masih ada vulnerability, update package yang tersisa.
Contohnya:
composer update \
symfony/dom-crawler \
symfony/html-sanitizer \
symfony/http-foundation \
symfony/http-kernel \
symfony/mailer \
symfony/mime \
symfony/polyfill-intl-idn \
symfony/routing \
symfony/yaml \
--with-all-dependencies \
--minimal-changes
Target akhirnya:
No security vulnerability advisories found.
6. Jalankan Testing
Clear Cache
php artisan optimize:clear
Jalankan Test
php artisan test
7. Jika Test Menggunakan SQLite
Secara default Laravel Testing biasanya menggunakan SQLite.
Jika project menggunakan MySQL, buat database testing sendiri.
Misalnya:
centrova_furniture_testing
Buat file:
.env.testing
Isi:
APP_ENV=testing DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=centrova_furniture_testing DB_USERNAME=root DB_PASSWORD=root
Komentari konfigurasi SQLite di:
phpunit.xml
Dari:
<env name="DB_CONNECTION" value="sqlite"/> <env name="DB_DATABASE" value=":memory:"/>
Menjadi:
<!-- <env name="DB_CONNECTION" value="sqlite"/> <env name="DB_DATABASE" value=":memory:"/> -->
Kemudian migration database testing:
php artisan migrate --env=testing
8. Refresh Database Saat Test
Tambahkan pada:
tests/Feature/ExampleTest.php
use Illuminate\Foundation\Testing\RefreshDatabase; class ExampleTest extends TestCase { use RefreshDatabase; }
Kemudian jalankan:
php artisan test
Target:
PASS
9. Cek Perubahan Git
git status
Pastikan hanya file yang memang berubah.
Contoh:
composer.lock public/js/filament public/css/filament tests phpunit.xml
10. Commit
git add .
atau lebih aman:
git add composer.lock git add public git add phpunit.xml git add tests
Commit:
git commit -m "fix: update dependencies and resolve security vulnerabilities"
Pastikan:
git status
Hasil:
nothing to commit, working tree clean
11. Push Branch
git push -u origin fix/security-dependencies
GitHub akan memberikan link Pull Request.
Contoh:
https://github.com/username/project/pull/new/fix/security-dependencies
12. Buat Pull Request
Base:
main
Compare:
fix/security-dependencies
Title:
fix: update dependencies and resolve security vulnerabilities
Description:
## Summary - Update Laravel patch version - Update Filament v5 - Update Symfony security patch - Resolve Composer Security Advisories - Update published Filament assets - Configure MySQL testing ## Verification - ✅ composer audit - ✅ php artisan test - ✅ Manual testing
Lalu:
Create Pull Request
Kemudian:
Merge Pull Request
13. Deployment ke Server (cPanel)
Masuk ke terminal server.
Pastikan branch:
git checkout main
Pull terbaru:
git pull origin main
Install dependency sesuai composer.lock:
composer install --no-dev --prefer-dist --optimize-autoloader
Jangan gunakan composer update di server, karena dapat menghasilkan versi package yang berbeda dari yang sudah diuji di lokal.
Clear cache:
php artisan optimize:clear
Jalankan migration:
php artisan migrate --force
--force hanya melewati konfirmasi pada environment production. Perintah ini tidak menghapus data. Jika tidak ada migration baru, Laravel hanya akan menampilkan Nothing to migrate.
Optimasi kembali:
php artisan optimize
Checklist Deployment
☑ composer audit ☑ php artisan test ☑ git status bersih ☑ commit ☑ push branch ☑ Pull Request ☑ Merge ke main ☑ git pull origin main di server ☑ composer install ☑ php artisan optimize:clear ☑ php artisan migrate --force ☑ php artisan optimize ☑ Smoke test aplikasi
Pelajaran Penting
- Jangan pernah menjalankan composer update langsung di production.
- Selalu gunakan branch khusus untuk update dependency.
- Selalu lakukan composer audit sebelum dan sesudah update.
- Gunakan --dry-run terlebih dahulu untuk melihat dampak update.
- Lakukan update secara bertahap (Laravel, Filament, Symfony, dll.), bukan sekaligus semua package.
- Gunakan composer install di server agar versi dependency sama persis dengan hasil pengujian lokal.
- Miliki database testing terpisah (misalnya *_testing) agar proses pengujian tidak menyentuh database development atau production.
- Pastikan deployment diakhiri dengan smoke test pada fitur-fitur utama aplikasi (login, dashboard, panel Filament, form, tabel, upload, editor, dan halaman publik).
Dengan alur ini, update dependency menjadi lebih aman, mudah ditelusuri, dan meminimalkan risiko gangguan pada aplikasi yang sedang berjalan.