Changelog
Riwayat lengkap perubahan paket pasax/secure-monitor. Versi terbaru: v1.7.4.
Versi terbaru: v1.7.4 · Packagist · Repositori GitHub
All notable changes to pasax/secure-monitor will be documented in this file.
[1.7.4] - 2026-11-10#
Added#
Favicon Resmi Pasax untuk Dashboard & Halaman Error Terblokir (
stubs/blade/pages/pasax/layout.blade.php,stubs/blocked.blade.php):- Mengintegrasikan favicon default resolusi tinggi menggunakan logo/ikon resmi Pasax (berbasis SVG/PNG base64 yang selaras dengan ikon aplikasi di bagian bawah sidebar navigasi).
- Melengkapi tag
<link rel="icon">,<link rel="shortcut icon">, dan<link rel="apple-touch-icon">untuk memastikan favicon tampil konsisten di semua peramban desktop maupun mobile. - Tetap mendukung kustomisasi penuh melalui konfigurasi
config('pasax.dashboard.favicon')atau penimpaan langsung via Blade@section('favicon').
Konfigurasi URL Kembali Dashboard Dinamis (
pasax.dashboard.back_url) (config/pasax.php,stubs/blade/pages/pasax/settings.blade.php,PasaxSettingController.php,PasaxSecuritySettingApiController.php):- Memungkinkan admin mengonfigurasi tautan tombol "Kembali ke Aplikasi Utama" di sidebar dashboard secara fleksibel melalui antarmuka Pengaturan Keamanan maupun file konfigurasi.
[1.7.3] - 2026-11-10#
Added#
Pembersihan Cache & Optimasi Sistem Sekali Klik (
php artisan optimize:clear) via Tombol Refresh Header (stubs/blade/pages/pasax/layout.blade.php,PasaxServerController.php,PasaxServerSecurityApiController.php):- Tombol Refresh di sudut kanan atas header dashboard kini memicu endpoint
POST {pasaxSlug}/optimize-cleardan APIPOST api/pasax/server/optimize-clear. - Secara otomatis mengeksekusi
Artisan::call('optimize:clear')yang membersihkan seluruh cache aplikasi, compiled views, konfigurasi, rute, dan event cache. - Dilengkapi animasi putar halus (spinning icon), pengiriman pesan aman via session flash, serta penayangan notifikasi floating toast hijau (5 detik) saat halaman termuat ulang dalam kondisi segar.
- Tombol Refresh di sudut kanan atas header dashboard kini memicu endpoint
Branding Resmi Pasax Adaptif pada Header & Sidebar Dashboard (
stubs/blade/pages/pasax/layout.blade.php):- Menghadirkan logo resmi horizontal PASAX pada sisi kiri header (
.sec-header-brand) lengkap dengan pemisah vertikal elegan dan tautan cepat ke Ringkasan Dashboard. - Varian logo dwitema adaptif otomatis: varian warna navy untuk Mode Terang (Light Mode) dan varian warna putih tajam (crisp white) untuk Mode Gelap (Dark Mode).
- Menggantikan ikon perisai generik lama pada footer sidebar versi dengan ikon resmi Pasax (squircle biru P berlatar jaringan node dan pasax oranye) beresolusi tinggi (Retina-ready) tanpa dependensi aset eksternal.
- Menghadirkan logo resmi horizontal PASAX pada sisi kiri header (
Lencana Informasi & Fitur Salin Cepat Alamat IP Pengakses di Header (
stubs/blade/pages/pasax/layout.blade.php):- Menambahkan informasi alamat IP publik/lokal yang sedang mengakses dashboard secara langsung di samping tombol Refresh (
.sec-client-ip-badge). - Dilengkapi indikator status aktif (live green beacon), label teks responsif, serta fitur interaktif satu klik (click-to-copy) ke clipboard dengan feedback notifikasi toast.
- Menambahkan informasi alamat IP publik/lokal yang sedang mengakses dashboard secara langsung di samping tombol Refresh (
Fixed#
- Pencegahan Alert Dialog Ganda pada Hapus Berkas Server Audit (
stubs/blade/pages/pasax/server.blade.php):- Menghilangkan konflik konfirmasi ganda bawaan peramban (
onsubmit="return confirm(...)") sehingga aksi hapus berkas mencurigakan konsisten hanya memicu 1 modal konfirmasi alert-dialog terpadu Pasax.
- Menghilangkan konflik konfirmasi ganda bawaan peramban (
- Perbaikan Kebocoran Teks Skrip pada Visualisasi Threat Map (
stubs/blade/pages/pasax/threat-map.blade.php):- Mengubah payload simulasi XSS menjadi format URL-encoded (
%3Cscript%3Ealert(1)%3C%2Fscript%3E) guna mencegah penutupan prematur blok<script>oleh parser HTML browser yang sebelumnya menyebabkan teks kode tumpah ke bagian bawah layar.
- Mengubah payload simulasi XSS menjadi format URL-encoded (
- Pencegahan Toast Duplikat & Konsistensi Aliran Radar Serangan:
- Menambahkan deduplication guard pada sistem notifikasi toast untuk memblokir penayangan pesan identik secara simultan.
- Mengalirkan data serangan database satu per satu (playback queue) secara real-time pada Threat Map sehingga statistik radar 100% konsisten dengan log riil tanpa menghasilkan phantom counters.
[1.7.2] - 2026-11-09#
Added#
Peta Intelijen Siber Interaktif & Dual-Engine Fallback pada Threat Map (
stubs/blade/pages/pasax/threat-map.blade.php):- Visualisasi intelijen serangan siber real-time dengan HUD status taktis (ThreatsEye SOC Style), koordinat node yang dilindungi, dan status firewall WAF (Blocking / Monitoring).
- Pilihan proyeksi peta fleksibel: 3D Globe (rotasi interaktif) dan 2D Tactical Flat Map (Mercator / Equirectangular).
- Dual-Engine & Offline Resilience: Mendukung failover multi-CDN (
jsdelivr&cdnjs), data benua offline bawaan (FALLBACK_WORLD_GEOJSON), dan engine Radar Cyber 2D Mandiri (Pure Canvas Standalone Engine) yang berjalan 100% tanpa dependensi eksternal bila CDN diblokir atau offline. - Perbaikan styling modal toast offline (
.threat-map-offline[hidden] { display: none !important; }) sehingga mudah ditutup tanpa menghalangi visualisasi radar.
Pembaruan Menyeluruh & Pembersihan Berkas Usang via
php artisan pasax:upgrade --force(dan Aliaspasax:upgrae):- Menambahkan alias resmi
pasax:upgraepada perintah konsol sehingga salah ketik tetap berjalan mulus. - Opsi
--forcekini memperbarui dan menyinkronkan seluruh aset dari instalasi lama ke standar versi terbaru:- Deteksi & Laporan Migrasi Database: Menampilkan deteksi jumlah migrasi baru yang belum diterapkan (
⚠ Terdeteksi X migrasi database baru...) dan laporan status pembaruan struktur database yang informatif. - Pembaruan Konfigurasi (
config/pasax.php): Otomatis menyisipkan konfigurasi baru yang hilang (sentinelIPC socket daemon,threat_mapglobe visualizer, URL rotasi dinamis, dan migrasi nama tabel ke prefixpasax_) tanpa menimpa nilai kustomisasi pengguna. - Sinkronisasi Tampilan (
resources/views/pages/pasax) & Rute: Secara otomatis menyinkronkan tampilan Blade dashboard dan rute ke versi terbaru, dengan opsi--clean-backupsdan--no-backup. - Pembersihan Berkas & Direktori Usang: Otomatis mendeteksi dan menghapus berkas serta direktori peninggalan versi lama yang sudah tidak digunakan (
routes/security.php,routes/security-api.php,config/security.php,resources/views/pages/security,resources/js/pages/security,resources/js/components/security,web-docs/,finis.sh,install-dash.sh), serta memangkas arsip cadangan berlebih (.backup-*) dengan mempertahankan 2 cadangan paling mutakhir.
- Deteksi & Laporan Migrasi Database: Menampilkan deteksi jumlah migrasi baru yang belum diterapkan (
- Menambahkan alias resmi
Aksi Unduh Berkas & Modal Konfirmasi Verifikasi Berkas Aman pada Server Audit (
stubs/blade/pages/pasax/server.blade.php,PasaxServerSecurityService.php,PasaxServerController.php):- Menambahkan tombol unduh aman (
⬇️ Unduh) pada tabel berkas mencurigakan & modal detail inspeksi yang memungkinkan admin mengunduh berkas berbahaya/mencurigakan secara aman dengan headerapplication/octet-streamdanX-Content-Type-Options: nosniffuntuk analisis offline. - Menambahkan aksi
🛡️ Verifikasidan modal konfirmasi🛡️ Verifikasi Berkas Amanyang memungkinkan admin menandai false positive sebagai berkas aman/terverifikasi disertai catatan investigasi opsional. - Berkas terverifikasi dicatat secara permanen di storage (
app/security/verified_files.json) lengkap dengan hash SHA-256, ukuran, identitas verifikator, dan waktu verifikasi, serta otomatis dikecualikan dari pemindaian mencurigakan masa depan selama hash berkas tidak dimanipulasi.
- Menambahkan tombol unduh aman (
Tombol Aksi Cepat & Modal Dialog Karantina IP Interaktif pada Log Keamanan (
stubs/blade/pages/pasax/logs.blade.php,PasaxBlockedIpController.php):- Menambahkan tombol aksi cepat
🚫di sebelah alamat IP dan tombol🚫 Blokirpada setiap baris riwayat log keamanan. - Menghadirkan modal dialog karantina terpadu
🚫 Blokir Alamat IPyang memungkinkan admin memblokir penyerang secara instan langsung dari halaman log. - Mendukung pemilihan cakupan pemblokiran berbasis kartu responsif: Hanya Perangkat (
device- isolasi fingerprint peramban tanpa mengorbankan pengguna lain di jaringan NAT/Wi-Fi yang sama) dan Seluruh IP Router (ip- blokir penuh seluruh lalu lintas dari IP publik tersebut). - Pilihan durasi fleksibel (1 jam, 6 jam, 12 jam, 24 jam, 3 hari, 7 hari, 30 hari, atau Permanen) dengan auto-fill alasan ancaman dan catatan investigasi internal opsional.
- Terintegrasi langsung dengan
PasaxSentinelBridgeuntuk langsung meneruskan pemblokiran router IP ke kernel firewall Linux (nftables/iptables).
- Menambahkan tombol aksi cepat
Chart Visual Tren Serangan (Line Chart) pada Halaman Security Logs (
stubs/blade/pages/pasax/logs.blade.php,PasaxLogController.php):- Menambahkan kartu visualisasi grafik garis (line chart) interaktif berbasis vektor SVG murni (zero-dependency) pada halaman audit log keamanan.
- Mendukung pergantian rentang waktu dinamis dengan tombol filter Minggu (7 hari), Bulan (30 hari), dan Tahun (12 bulan) dengan tetap mempertahankan filter pencarian, event, level keparahan, rentang tanggal, dan jumlah paginasi tabel.
- Dilengkapi ringkasan telemetri eksekutif (total ancaman pada periode, tanggal & volume serangan puncak, rata-rata harian/bulanan), titik data interaktif (nodes) dengan tooltip rincian keparahan (Critical, High, Medium, Low), garis grid horizontal berlabel sumbu Y, serta gradien area visual (smooth area fill).
[1.7.1] - 2026-11-09#
Removed#
- Pembersihan Direktori Dokumentasi Standalone Lama (
web-docs/&finis.sh):- Menghapus folder
web-docs/(Astro Starlight) seutuhnya (~462 MB) dan berkas pembungkusfinis.sh. - Seluruh 29 modul dokumentasi teknis
pasax-secure-monitortelah dialihkan permanen ke Pasax Cloud SOC (https://pasax.is-a.dev/docs) bertenaga Neon Serverless PostgreSQL Database. - Membersihkan referensi
web-docsdanfinis.shdaricomposer.json,.gitattributes,push.sh, danAGENTS.md.
- Menghapus folder
[1.7.0] - 2026-11-09#
Added#
- Jembatan IPC Unix Domain Socket ke Pasax Sentinel Host Daemon (
PasaxSentinelBridge) — menambahkan jembatan komunikasi performa tinggi (< 0.2ms) antara aplikasi Laravel dan daemonpasax-sentinelmelalui socket Unix (/run/pasax/agent.sockatau/tmp/pasax/agent.sock). - Delegasi Pemblokiran IP Otomatis ke Kernel Firewall Linux (
nftables/iptables) — setiap pemblokiran IP yang dipicu oleh honeypot, tripwire, atau deteksi anomali diPasaxService::blockIp()kini otomatis diteruskan ke kernel firewall host melalui Sentinel untuk melakukan drop koneksi seketika sebelum paket menyentuh PHP-FPM atau thread web server. - Sinkronisasi Pembukaan Blokir Kernel Firewall —
PasaxService::unblock()danPasaxService::unblockIp()secara otomatis menginstruksikan daemon Sentinel untuk mencabut aturan drop IP dari kernel firewall saat blokir dicabut oleh admin. - Perintah Diagnostik CLI
php artisan pasax:sentinel— menyediakan perintah artisan terpadu dengan opsi--ping,--status,--block=IP, dan--unblock=IPuntuk menguji dan memverifikasi koneksi socket Unix dengan daemon Sentinel secara langsung dari terminal. - Konfigurasi Lingkungan Terpusat (
config/pasax.php) — penambahan blok konfigurasisentineldengan opsienabled,socket, dantimeoutyang dapat disesuaikan lewat environment variablePASAX_SENTINEL_SOCKET.
[1.6.9] - 2026-11-07#
Added#
- Modal Dialog Detail & Bukti Cuplikan Kode untuk Berkas Mencurigakan (
stubs/blade/pages/pasax/server.blade.php) — menambahkan tombol🔍 Detaildan tautan interaktif pada setiap baris temuan di tabel Suspicious files & webshells. Modal menyajikan nama berkas, jalur lengkap, kategori ancaman, ukuran, waktu modifikasi presisi, alasan lengkap, serta blok bukti cuplikan kode ($file['snippet']) yang terdeteksi dengan tombol hapus langsung dari dalam modal. - Kolom Tanggal Modifikasi Presisi pada Tabel Audit Server — menyajikan tanggal & jam berkas hingga satuan detik (
d M Y, H:i:s) dengan timestamp relatif (diffForHumans) dan tooltip ISO 8601.
Fixed#
- Perlindungan Ganda Konfirmasi Penghapusan Berkas (Native Fallback) — menambahkan
onsubmit="return confirm(...)"pada form penghapusan berkas mencurigakan untuk menjamin dialog konfirmasi peringatan selalu muncul di peramban pengguna bahkan jika JavaScript kustom terhambat atau file view di VPS belum disinkronkan.
[1.6.8] - 2026-11-07#
Fixed#
- Eliminasi False Positive Injeksi PHP Polyglot pada Berkas Media Biner (JPEG/PNG/Media) — memperketat pola regex deteksi short tag
<?padaPasaxServerSecurityServicedanPasaxSafeImageFile. Sebelumnya, pola<\?\s*\$[a-zA-Z_\x7f-\xff]mengizinkan sembarang byte tinggi (\x7f-\xff) sehingga tabrakan byte biner terkompresi acak seperti3C 3F 24 56(<?$V) dan3C 3F 24diikuti high-byte (<?$?) pada foto profil pengguna asli keliru dideteksi sebagai injeksi PHP polyglot kritis. Pola kini secara ketat mewajibkan token PHP valid, fungsi eksekusi berbahaya (eval,system,passthru,exec,shell_exec,assert,popen,proc_open), atau assignment variabel PHP nyata ($_GET,$_POST,$cmd = ...), menghilangkan false positive pada foto pengguna tanpa mengorbankan proteksi terhadap webshell nyata. - Penguatan Pengujian Regresi Media Acak — menambahkan assertion pada
PolyglotImageTestuntuk memastikan berkas foto biner dengan pola byte<?$Vdan<?$?lolos verifikasi 100% pada pemindai audit server dan aturan validasi upload.
[1.6.7] - 2026-10-28#
Added#
- Penyematan Badge Versi Aktif & Tautan Rilis pada Sidebar Dashboard (
stubs/blade/pages/pasax/layout.blade.php) — menampilkan badge versi aktif paket Pasax (v1.6.7) berdesain modern monospace di bagian bawah navigasi sidebar (tepat di bawah tombol tema gelap/terang). Badge ini terhubung langsung ke catatan rilis resmi GitHub (https://github.com/pasax-dev/pasax-secure-monitor-laravel/releases) dan otomatis beradaptasi dengan mode gelap/terang sistem. - Deteksi Kedaluwarsa Layout pada
pasax:upgrade— penambahan pemeriksaan penandasec-sidebar-versionpada perintahphp artisan pasax:upgradesehingga dapat mengingatkan pengguna jika berkas tampilanlayout.blade.phpyang terpublikasi di proyek host belum memuat komponen badge versi terbaru. - Sinkronisasi dan Pengujian Menyeluruh pada Host Sandbox (
ring/pasax-yes) — pembaruan dan pengujian integrasi tampilan dashboard pada aplikasi percontohanring/pasax-yesdengan assertion render HTML yang memastikan teks versiv1.6.7dan selektor.sec-sidebar-versiontersaji sempurna serta seluruh 42 tes unit/fitur tetap hijau.
[1.6.6] - 2026-10-28#
Added#
- Penyelarasan Otomatis Constraint Versi Lengkap di
composer.jsonHost — perintahphp artisan pasax:installdanpasax:upgradekini secara otomatis mendeteksi dan menyelaraskan constraint versi paket dicomposer.jsonproyek host ke versi semver lengkap (misal:"pasax/secure-monitor": "^1.6.6") jika sebelumnya Composer menyederhanakannya menjadi"^1.6"tanpa patch. - Tampilan Versi Lengkap pada CLI Wizard Instalasi — perintah
pasax:installkini menampilkan identitas versi rilis lengkap paket di judul instalasi (Memulai instalasi Pasax (Bulwark) v1.6.6...) dan pada daftar pemeriksaan kesiapan lingkungan (Pasax Security Engine (v1.6.6)). - Rekomendasi Instalasi Versi Lengkap pada Dokumentasi — memperbarui seluruh panduan instalasi (
README.md,documents/,web-docs/) agar menyarankan perintahcomposer require "pasax/secure-monitor:^1.6.6"guna memastikan deklarasi dependensi di aplikasi pengguna selalu terdefinisi secara presisi.
[1.6.5] - 2026-10-28#
Fixed#
- Pencegahan False Positive Polyglot Webshell pada Berkas Citra (JPEG/PNG/Media) — memperketat pola pencocokan short echo tag
<?=padaPasaxServerSecurityService,PasaxSafeImageFile, danPasaxService. Sebelumnya, tabrakan 4-byte biner acak (3C 3F 3D 6B/<?=k) yang terjadi secara alami di dalam aliran kompresi piksel DCT/Huffman pada foto berita asli (seperti dokumentasi resmi pemerintah) keliru dideteksi sebagai webshell / backdoor injeksi PHP. Pola kini mewajibkan adanya sintaks PHP yang valid (seperti variabel$_GET/$_POSTatau pemanggilan fungsi eksekusi) agar tidak mengorbankan keamanan polyglot sekaligus menghilangkan peringatan palsu pada berkas foto murni. - Pencegahan Anomali Null-Byte Palsu pada Ekstraksi Konten Unggahan — menyelaraskan deteksi token awal pada
PasaxService::extractUploadedFileContentssehingga tidak lagi mengekstrak data biner mentah citra ke dalam inspection haystacks saat hanya terdapat karakter<dan?secara kebetulan. - Penguatan Pengujian Regresi Media Aman — penambahan rangkaian unit test pada
PolyglotImageTestuntuk memastikan foto asli dengan pola byte biner serupa tetap lolos 100% pada pemindai audit server dan aturan validasi upload, sementara webshell sungguhan tetap diblokir seketika.
[1.6.4] - 2026-10-26#
Added#
- Penyediaan Otomatis AI Agent Skill (
pasax-skills) — saat instalasi (php artisan pasax:install), paket kini otomatis mempublikasikan skill asisten cerdas (stubs/skills/pasax/SKILL.md) ke direktori host.agents/skills/pasax/SKILL.md. Skill ini membekali agent AI dengan pemahaman menyeluruh tentang aturan Zero-Vendor-Edit, FacadePasax, Model Eloquent berawalan dinamis, audit keamanan server, reverse proxy, serta pengujian keamanan. - Injeksi Panduan Idempoten ke
AGENTS.md&CLAUDE.md—pasax:installdanpasax:upgradeotomatis menyematkan blok panduan terstruktur berbatas komentar aman (<!-- pasax-guidelines:start -->...<!-- pasax-guidelines:end -->) pada berkasAGENTS.md(danCLAUDE.md) di root proyek pengguna tanpa merusak panduan host yang sudah ada. - Pelepasan Bersih Skill pada
pasax:uninstall— perintah uninstall kini membersihkan berkas skill dan menghapus blok panduan dariAGENTS.mdsertaCLAUDE.md, dengan opsi--keep-skillsbila pengguna ingin mempertahankan skill tersebut. - Integrasi Penuh Portal Dokumentasi Resmi (
https://pasax.is-a.dev/) — skill AI, installer wizard, dan panduan agent kini terhubung langsung dengan bab-bab dokumentasi resmi di https://pasax.is-a.dev/ (Instalasi, Konfigurasi, Deteksi ReDoS, Karantina Perangkat, Audit Server, Streaming Log, REST API, dan Hardening Server). - Implementasi Percontohan 8 Modul Dasbor & API Kustom Host — modul lengkap di aplikasi host percontohan (
ring/pasax-yes/) mencakup Controller Web & REST API untuk Ringkasan, Log Deteksi, Blokir IP, Daftar Putih, Audit Server, Sesi Pengguna Masuk, Tiket Banding, dan Pengaturan Runtime beserta 42 pengujian fitur hijau.
[1.6.3] - 2026-10-26#
Added#
- Dukungan Kustomisasi Mandiri Tanpa Mengubah Vendor — panduan resmi dan implementasi arsitektur headless yang memungkinkan pengembang aplikasi host membangun tampilan monitoring Blade kustom (selaras dengan layout utama aplikasi
@extends('layouts.app')) dan REST API JSON mandiri menggunakan FacadeInternal\Pasax\Facades\Pasaxdan Model resmiPasaxLog,PasaxBlockedIp. - Penyelarasan Kontrak Facade Pasax — penambahan method
isEnabled(),isBlockEnforcementEnabled(), danblockIp(string $ip, ?string $reason = null, ?int $durationHours = null, ...)padaPasaxServiceuntuk menyempurnakan pemanggilan skalar yang dideklarasikan pada FacadePasax. - Bab Dokumentasi Integrasi 04 (
documents/07-integration-guides/04-custom-dashboard-dan-api-tanpa-ubah-vendor.md) — panduan komprehensif mengenai kebijakan Zero-Vendor-Edit, pemisahan zona aman aplikasi host vs zona terlindungvendor/, serta tutorial lengkap pembuatan controller kustom.
Changed#
- Pembersihan Distribusi Pustaka Vendor (
.gitattributes) — mengeksklusikan direktorireleases/danskills/dari arsip Composer (export-ignore) sehingga instalasi pengguna lebih bersih, ramping, dan bebas dari berkas catatan pengembangan internal.
[1.6.2] - 2026-10-25#
Added#
- Perintah Otomatisasi Deployment VPS Ramah Produksi (
php artisan pasax:deploy) — perintah deploy idempoten yang dirancang khusus untuk deployment di server/VPS produksi tanpa risiko merusak atau menduplikasi data aplikasi yang sudah padat. Otomatis memastikanPASAX_DASHBOARD_SECRETsiap di.env, mengeksekusi migrasi tabel Pasax secara terisolasi (--only-package), menyemai default knobs kepasax_settingstanpa penumpukan data (seedDefaultSettings()), dan membersihkan stale cache/views. Dilengkapi opsi--clean-views,--skip-settings,--force, dan--dry-run. - Modern Alert-Dialog Konfirmasi Interaktif — seluruh aksi berbahaya dan mutasi data pada dasbor Blade (
allowed-ips,blocked-ips,server,sessions,settings,tickets) kini dilindungi modal konfirmasi bertema (Danger, Warning, Success) sebelum formulir dikirimkan, menggantikan default browser dialog atau pengiriman tanpa konfirmasi. - Sistem Notifikasi Floating Toast Real-time — komponen toast modern otomatis muncul di pojok kanan bawah antarmuka dasbor saat aksi berhasil atau gagal, lengkap dengan auto-dismiss, progress timer bar, dan integrasi penuh dengan session flash Laravel.
Fixed#
- Preservasi Session Flash pada Rotating Dashboard — memperbaiki hilangnya flash message notifikasi saat terjadi rotasi token URL atau redirect 302 ganda menggunakan
session()->reflash()di middlewarePasaxRotatingDashboarddan helper traitRespondsWithPasaxDashboard. - Penanganan Route Parameter pada Model Route Binding — memperbaiki parameter shifting ketika
{pasaxSlug}hadir pada rute detail/aksi dasbor (blocked-ips/{id},tickets/{id}, dsb.). - Harmonisasi Tampilan Mode Gelap & Terang — merapikan pewarnaan latar belakang, border, dan teks pada seluruh halaman dasbor Blade menggunakan variabel CSS terpusat (
--sec-bg,--sec-card,--sec-text,--sec-border) sehingga transisi tema konsisten di seluruh elemen visual.
[1.6.1] - 2026-10-25#
Added#
- Integrasi Konsol Strix AI Pentest Otonom (
ring/app-waf) — konsol pengujian WAF kini terintegrasi penuh dengan agent AI pentesting otonom Strix (ghcr.io/usestrix/strix-sandbox:1.3.0). Mendukung multi-provider LLM (Google Gemini, OpenAI ChatGPT dengan chipgpt-5, OpenRouter, dan OpenCode/Local AI), peluncur scan otonom dengan pembatas budget token (mulai dari $1 USD), live streaming terminal console dengan filter log dan deteksi otomatis unduhan sandbox Docker, serta tab penampil laporan kerentanan (penetration_test_report.md&vulnerabilities.json). - Perintah
php artisan pasax:secret— membuat atau membuat ulang (--force)PASAX_DASHBOARD_SECRETpada.env, dengan opsi--showuntuk menampilkan nilai dan--path=untuk berkas env selain.env. Berguna setelah deploy ataugit clonebaru:.env.examplehanya memuat baris kosong sehingga aplikasi hasil clone belum punya rahasia; jalankanpasax:secretlaluconfig:clear. Didaftarkan otomatis di service provider dan didokumentasikan padadocuments/05-cli-and-automation/01-artisan-commands.md§9. PASAX_DASHBOARD_SECRETkini benar-benar dipakai —PasaxDashboardUrlServicemenyimpan HMAC-SHA256 token dashboard aktif dan token "previous" di sesi, lalu memverifikasinya dengan rahasia per aplikasi. Mengganti rahasia otomatis membatalkan token lama (pengguna dialihkan mulus ke token baru, bukan 404); bila rahasia kosong (instalasi lama) validasi tetap kompatibel. Pengelola env dipusatkan diSupport\PasaxDashboardSecret.
Changed#
pasax:install&pasax:upgradehanya menulis rahasia nyata ke.env— sebelumnya nilaiPASAX_DASHBOARD_SECREThasil generate juga ditulis ke.env.examplesehingga ikut ter-commit; kini.env.examplehanya memuat baris kosong dan nilai nyata hanya ada di.env.pasax:installmembuat rahasia pada setiap instalasi (selama--without-envtidak dipakai), termasuk saat dashboard belum diaktifkan.
Fixed#
- Reload dashboard URL acak setelah masa tenggang berakhir 404 — pada mode
PASAX_DASHBOARD_ROTATING=true, URL di address bar menjadi token "previous" segera setelah halaman disajikan, dan setelahgrace_seconds(default 120 dtk) token itu dibuang sehingga reload beberapa menit kemudian — atau setelah 30 menit halaman dibiarkan terbuka — dijawab404 Not Foundmeski sesi login masih sah. MiddlewarePasaxRotatingDashboardkini mengenali token lama milik sesi sendiri tanpa batas tenggang (viaPasaxDashboardUrlService::previousSlugValue()) lalu mengalihkan302ke token aktif dengan path + query dipertahankan; token asing pada navigasi HTML (mis. setelah login ulang atau sesi baru) juga dialihkan ke token aktif sesi tersebut, bukan 404. Permintaan AJAX/feed dan aksi tulis dengan token asing tetap 404 agar dashboard tetap tersamar, sedangkan aksi tulis dengan token lama yang kedaluwarsa diloloskan memakai token aktif agar formulir yang lama terbuka tidak gagal. Dijaga test regresi di paket maupun aplikasi real (ring/pasax-yes).
[1.6.0] - 2026-10-24#
Added#
- URL dashboard acak sekali pakai (moving-target, berubah tiap reload): saat dashboard dipasang,
pasax:installkini mengaktifkanPASAX_DASHBOARD_ROTATING=true+ membangkitkanPASAX_DASHBOARD_SECRETunik per aplikasi. Pintu stabil/pasaxselalu 302 ke/pasax-{token}/milik sesi tiap pengguna (mis.http://localhost:8000/pasax-95856857476jdhjs5/logs, laluhttp://localhost:8000/pasax-634664873647jbdjshf/threat-map); token 16 karakter diputar setiap halaman HTML sehingga reload browser selalu berganti URL. URL lama hidup selama masa tenggangPASAX_DASHBOARD_GRACE_SECONDS(120 dtk, agar pollingthreat-map/feed& submit form tidak balapan) lalu dialihkan ke URL baru; slug asing dijawab 404 agar dashboard tersamar. Seluruhroute('pasax.dashboard.*')di Blade otomatis memakai token terbaru tanpa mengubah view (viaURL::defaults). Kunci barupasax.dashboard.{rotating,secret,token_length,single_use,grace_seconds}+ envPASAX_DASHBOARD_*, middlewarepasax.rotating(PasaxRotatingDashboard), layananPasaxDashboardUrlService, dan kontroler pintu masukPasaxDashboardEntryController; host berkas rute lama memperolehnya viapasax:upgrade --sync-routes. Nonaktifkan (PASAX_DASHBOARD_ROTATING=false) untuk kembali ke prefix statis.
[1.5.0] - 2026-10-22#
Added#
- Threat Map — peta live lintasan penyerang menuju server: halaman dashboard Blade baru (
/pasax/threat-map, blindonThreat Mapdi sidebar) yang menggambar bola dunia interaktif: kulit negara memakai UNAD, panar lintasan serangan berwarna sesuai tingkat ancaman dari asal geografis IP penyerang menuju titik server yang dipantau, gelombang kejut saat kena, serta panel real-time intrusion logs berisi lokasi kota/negara, IP, deskripsi aturan, path, dan status blokir daripasax_logsriil 24 jam terakhir (top attacker per IP). - Live feed real-time:
GET /pasax/threat-map/feedmengembalikan JSON log serangan terbaru (default 20) sejak id terakhir (?after=), rincian statistik hari ini, dan lokasi geoIP per IP; halaman memandu polling (pembacaan berulang) tiap 8 detik dan menumbuhkan arka baru seketika saat serangan masuk tanpa reload halaman. - Resolver geoIP dipakai bersama: lokasi IP penyerang memakai
PasaxUserLoginService::resolveLocation()dengan cache 30 hari yang sama seperti perekam sesi sehingga hemat panggilan API; IP lokal/intranet otomatis dipetakan ke koordinat pusat server default. - Konfigurasi peta: kunci
pasax.dashboard.threat_map.*+ envPASAX_DASHBOARD_TARGET_NAME|LAT|LON,PASAX_DASHBOARD_MAP_WINDOW_HOURS(default 24),PASAX_DASHBOARD_MAP_MAX_ORIGINS(10),PASAX_DASHBOARD_MAP_REFRESH_SECONDS(8) untuk menyetel jendela data, jumlah asal panah, cadence polling, dan titik server. - Rute dashboard:
Route::get('threat-map')→PasaxThreatMapController::index(halaman) +threat-map/feed→feed(JSON) padaroutes/pasax-web-blade.phpdan stubpasax-blade.php.stub, dilindungi middlewareweb+authsama seperti seluruh halaman dashboard; item navigasi sidebar dilindungi@if (\Route::has(...))agar aman bagi berkas layout host yang lama. - Pengingat upgrade untuk menu baru:
pasax:upgradekini memeriksa penandapasax.dashboard.threat-mappadalayout.blade.phpterpublikasi dan memperingatkan menjalankan--sync-views(dengan pencadangan otomatis) bila menu Threat Map belum ada. - Mode layar penuh Threat Map: tombol
⛶ Full screendi sudut kanan atas kanvas menyematkan kartu peta di seluruh jendela (position:fixed; inset:0+ kelas body penahan skrol) sehingga dapat dipakai apa pun tata letak dasbor host; kanvas mematuhi ukuran baru lewatResizeObserver, tombolEscapekeluar dari mode, dan pada ponsel panel sisi dibatasi 45vh agar peta tetap dominan. - Pengaturan berbasis database dengan ambang per tingkat ancaman: seluruh perilaku auto-block WAF kini dapat diatur langsung dari dashboard tanpa menyentuh
.env— ambang blokir per tingkat (critical,high,medium,low, default 1/2/3/5) disimpan pada tabelpasax_settingsdan disemai otomatis oleh seederPasaxDefaultSettingsSeedersaatpasax:installmaupunpasax:upgrade. - Lingkup blokir adaptif
auto: mode'device,ip,auto'pada pengaturan auto-block — perangkat bila identitasdevice_ideksplisit terdeteksi, fallback ke isolasi IP utuh saat fingerprint tidak tersedia (aman bagi pengguna lain di WiFi yang sama). - Sanksi kombinasi: blokir gabungan hanya bila ancaman datang dari minimal 2 tingkat berbeda dan total kejadian melampaui
auto_block.combined_threshold(default 3) sehingga serangan satu jenis berfrekuensi rendah tidak tersapu salah. - Penghalaman pengaturan dashboard diperbarui: kartu lingkup 3 pilihan (Device/IP/Auto dengan pill "WiFi-Safe"), kartu ambang per tingkat dengan warna tingkat ancaman, pilihan durasi blokir berjenjang (6 jam s.d. 1 tahun/permanen), ambang kombinasi, modul brute-force login, mitigasi retensi log, dan kotak simulasi live auto-block — seluruhnya memakai JavaScript vanilla tanpa NPM.
- Data Table interaktif di seluruh tabel dashboard: penambahan filter rentang tanggal (
date_fromdandate_to), selector entri per halaman (10,25,50,100), dan footer pagination lengkap dengan ringkasan entri ("Showing X to Y of Z entries") serta tombol navigasi halaman terpadu dilogs.blade.php,blocked-ips.blade.php,allowed-ips.blade.php,sessions.blade.php, dantickets.blade.phpmelalui komponen reusablepagination.blade.php. - Visualisasi Top Attackers 24h & animasi real-time pada Overview: panel penyerang teratas di
overview.blade.phpkini menyajikan data aktual daripasax_logsdengan persentase bahaya dinamis, animasi bar CSS halus, serta rincian serangan terklasifikasi. pasax_settingskini menyetel throttle login & retensi log:PasaxLoginThrottleServicemembaca konfigurasi lockout dari database terlebih dahulu (fallback.env/config) sehingga operasional harian dapat menyetel dari dashboard.- Env core-only:
stubs/env.stubdirampingkan hanya berisi kunci bootstrap inti (PASAX_MONITOR_ENABLED,PASAX_IP_WHITELIST,PASAX_AUTO_REGISTER_MIDDLEWARE, flag rute/dashboard,PASAX_SUPPORT_EMAIL); kunci lain lama tetap didukung sebagai fallback senyap namun tidak lagi ditulis installer.
Fixed#
- Uninstall: pembersihan middleware pada
bootstrap/app.phpgaya importuse+ nama kelas pendek — pemasangan yang mendaftarkan WAF lewatuse Internal\Pasax\...\PasaxBlockIpAddress;+ unqualifiedPasaxBlockIpAddress::classtidak ikut dibersihkan sehingga aplikasi host mati 500 setelah paket dilepas (class not found); penghapus kini mengenali baris import maupun pemakaian nama pendek dengan pemeriksaan batas kata agar nama kelas host yang kebetulan berakhiran sama (mis.SomeBlockIpAddress) tetap aman — dijaga 2 test regresi. - Pasang ulang non-interaktif kini menyemai pengaturan bawaan — opsi baru
--migratepadapasax:installmenjalankan migrasi sehingga alias seeding berjalan di mode script (--no-interaction); seeding juga tereksekusi bila tabelpasax_settingssudah ada meski migrasi dijalankan terpisah setelah wizard. - Stubs rute dashboard terpublikasi kini memuat Threat Map: stub
routes/pasax.phpyang diterbitkan host (tagpasax-routes) sempat kehilangan dua rutethreat-mapsehingga tautan petanya mati setelah proyek host memuat berkas rute kustom; kini keduanya ikutpasax-web-blade.phpdan tervalidasi di aplikasi real (ring/pasax-yes) lewat alurpasax:upgrade --sync-routes. - Petunjuk CLI memakai rute dashboard resmi: keluaran
pasax:scan-logskini mengarah ke/pasax/logsdan/pasax/blocked-ips(bukan alias lama/security/*), wizardpasax:installmenyebut prefix API/api/pasax/*, dan hasil pemindaian access log tercatat denganpathrute konsisten. - Halaman pengaturan gagal render karena penanganan
@jsonBlade: ekspresi@json([...larik inline...])dengan lebih dari 2 koma (mis. larik 4 pasang ambang per tingkat) dipangkas senyap oleh parser kommacompileJsonmilik Laravel sehingga elemen terakhir hilang dan sisa tanda]/)membuat Blade errorUnclosed '['; daftar referensi JS kini dihitung via@phplalu dikirim sebagai variabel (@json($simLevels)dst.) yang aman terhadap penyectaan koma — regresi dijaga test render halaman pengaturan. - Panel serangan terbaru Threat Map mengulang data arsip alih-alih streaming: polling tiap 8 detik mem-fetch
feedtanpa kursor?after=sehingga 20 log arsip yang sama muncul kembali berulang dan jumlah serangan hari ini seolah hidup; kini JS menyemailastIddari sampel payload, setiap poll memakai?after=lastId, dan kursor diperbarui daridata.last_idsehingga hanya serangan baru sungguhan daripasax_logsyang mengalir masuk (last_idhanya maju, tidak pernah mundur) — sampel seed kini membawaid+ stempel waktu ISO asli darilogToArray($log, true); diverifikasi end-to-end di aplikasi real: serangan baru dari IP 198.51.100.23 menghasilkan tepat 2 baris baru saat polling?after=8, tanpa arsip yang dikirim ulang. - Pemberitahuan kegagalan Globe CDN: menangani kegagalan pemuatan skrip eksternal Three.js/Globe.gl secara anggun dengan antarmuka fallback yang informatif dan ramah pengguna tanpa memblokir seluruh fungsionalitas peta.
- Isolasi cache pengaturan
PasaxService::getSetting(): mencegah caching nilai fallback default ke memori internal ketika nilai pada database belum tersimpan atau berubah secara dinamis, serta melengkapi metodeflushSettingsCache().
[1.4.5] - 2026-10-21#
Fixed#
- Penyelarasan resolusi IP dan perangkat pada
PasaxService::inspect(): pemeriksaan daftar putih (whitelist) di awal inspeksi kini menggunakanresolveClientIp($request)danresolveDeviceId($request)secara penuh sehingga permintaan di balik proxy/tunnel dengan header forwarding tidak terkecoh oleh soket IP mentah. - Deteksi pemindai ffuf dengan banner lengkap: regex signature pemindai keamanan kini mendeteksi format banner bawaan
Fuzz Faster U Foolselain singkatanffuf. - Pengerasan simulasi server pengembangan: penanganan rute berkas konfigurasi rahasia (
.htaccess,.env,composer.json) diuji dan diverifikasi memicu respons blokir instan 403 secara konsisten.
[1.4.4] - 2026-10-21#
Fixed#
- Whitelisting rute tiket banding di middleware
PasaxBlockIpAddress: rute publik untuk pengajuan dan pengecekan status tiket banding (api/pasax/unblock-tickets/*,api/security/unblock-tickets/*, dan pola wildcard*/unblock-tickets/*) kini dikecualikan dari pencegatanPasaxBlockIpAddresssehingga pengguna yang sah namun terblokir tetap dapat mengirimkan tiket banding melalui form modal maupun REST API. - Validasi payload pengujian aplikasi real: seluruh pengujian end-to-end WAF dan dashboard di
ring/pasax-yesdiverifikasi dan dipastikan berjalan hijau dengan status code dan payload yang valid.
[1.4.3] - 2026-10-21#
Added#
- Prefix
Pasax*pada seluruh komponen & berkas yang diterima pengguna:- Seluruh komponen yang dipublikasikan atau diintegrasikan ke proyek host saat
composer require pasax/secure-monitordanphp artisan pasax:installkini menggunakan awalanPasaxyang konsisten agar mudah dibedakan dari kelas bawaan aplikasi host:- Models:
PasaxBlockedIp,PasaxLog,PasaxLoginAttempt,PasaxIpUnblockRequest,PasaxUserLogin,PasaxTrustedIp,PasaxAllowedIp,PasaxSetting(dan tabel bawaanpasax_*). - Middleware:
PasaxBlockIpAddress,PasaxDetectSecurityThreats,PasaxEnsureSecurityAdmin,PasaxInjectAnnouncementBanner,PasaxTrackUserActivity. - Listeners:
PasaxLogFailedLoginAttempt,PasaxRecordUserLogin,PasaxResetLoginAttempts. - Validation Rules:
PasaxSafeAssetPath,PasaxSafeImageFile. - Services:
PasaxAccessLogScannerService,PasaxLoginThrottleService,PasaxServerSecurityService,PasaxUserLoginService,PasaxVersionCheckService,PasaxService. - Support:
PasaxDashboardView,PasaxTableResolver. - Concerns / Traits:
HasPasaxSecurityRelations,ResolvesPasaxTable,RespondsWithPasaxDashboard. - Console Commands:
PasaxInstallCommand,PasaxUpgradeCommand,PasaxBaselineCommand,PasaxPruneSecurityLogsCommand,PasaxPurgeInjectedDataCommand,PasaxScanAccessLogsCommand,PasaxUnblockIpCommand,PasaxUninstallCommand. - API Controllers:
PasaxAllowedIpApiController,PasaxBlockedIpApiController,PasaxIpUnblockRequestApiController,PasaxSecurityLogApiController,PasaxSecuritySettingApiController,PasaxServerSecurityApiController,PasaxUserSessionApiController. - Dashboard Controllers:
PasaxAllowedIpController,PasaxBlockedIpController,PasaxLogController,PasaxOverviewController,PasaxServerController,PasaxSessionController,PasaxSettingController,PasaxTicketController.
- Models:
- 100% Kompatibilitas Mundur: Seluruh nama kelas lama (
BlockedIp,SecurityLog,BlockIpAddress,HasSecurityRelations,ServerSecurityService, dll.) tetap disediakan sebagai subclass danclass_aliastransparan disrc/compat.phpdan berkas kelas lama, sehingga kode pengguna lama, test, maupun import yang sudah ada tidak mengalami pemecahan (zero breaking changes). - Upgrade Mulus: Migrasi
2026_10_21_000001_prefix_pasax_tables.phpdanResolvesPasaxTablemendeteksi status tabel secara runtime sehingga aplikasi tidak errortable not foundsebelum maupun sesudah migrasi dijalankan. - Installer & Uninstaller:
pasax:installotomatis menyematkanHasPasaxSecurityRelationsdanPasaxBlockIpAddress/PasaxDetectSecurityThreats.pasax:uninstallmembersihkan kedua versi nama (berawalanPasaxmaupun lama).
- Seluruh komponen yang dipublikasikan atau diintegrasikan ke proyek host saat
Fixed#
pasax:uninstallkini total bersih: path stub.envsalah ('__DIR__/....'literal +dirname(..., 2)) sehingga komentar stub tidak pernah terhapus — diperbaiki; receiver$middlewaregantung ikut dihapus saat blokappend()dikosongkan (sebelumnya merusak sintaksbootstrap/app.php); file*.backup-*milik Pasax dan direktori induk kosong (views/errors,views/pages,js/pages,js/components) ikut dihapus. Tercakup 2 test regresi baru.- Tautan mati di banner web-docs:
announce.tsmenaut ke/cli-automation/upgrade-guide/yang tidak ada — dibetulkan ke/cli-automation/upgrade-and-uninstall/; tambahpublic/.htaccess(ErrorDocument 404 /404.html+ redirect 301 URL lama) karena production memakai Apache.
Changed#
Pengumuman hanya di local + debug: banner/dialog
InjectAnnouncementBannerdan modalpasaxAnnouncedashboard tidak lagi dirender kecualiAPP_ENV=localdanAPP_DEBUG=true.PHPStan level 5 hijau kembali (CI merah sejak v1.3.x):
AllowedIp::isValidPattern()ditulis ulang tanpa perbandingan!== nullyang selalu benar (terdeteksi sebagainotIdentical.alwaysTrue) — validasi CIDR kini memakai early-return yang setara perilakunya. Seluruh 12 kombinasi matriks pest + Pint sudah hijau; hanya job PHPStan yang gagal.
Added#
- Pilihan cakupan API dan Web saat instalasi (bawaan: keduanya): wizard
pasax:installkini menanyakan dua hal — "Pasang dukungan API?" dan "Pasang dashboard web Blade murni?" — masing-masing bawaan Ya. Flag baru--without-web(pasangan--without-api);--api-onlytetap sebagai jalan pintas "API ya, Web tidak". Menolak keduanya menghasilkan instalasi inti saja (kelola via Artisan). Kombinasi baru dicakup test (--without-webhanya menerbitkan rute API,--without-apihanya halaman web).
Removed#
- Dashboard kini Blade murni saja — pilihan starterkit Livewire/React/TSX dihapus:
pasax:installtidak lagi memiliki opsi--with-livewire,--with-react-dashboard,--with-tsx,--with-both, dan--stack; sebagai gantinya satu opsi--with-dashboard(alias:--with-plain,--with-blade) plus konfirmasi wizard ya/tidak.PasaxServiceProviderselalu mendaftarkan rute Blade (routes/pasax-web-blade.php) tanpa cabang driver;RespondsWithDashboardselalu me-render view Blade (parameter$inertiawarisan diabaikan); controller dashboard tidak lagi bergantung padainertiajs/inertia-laravelmaupunlivewire/livewire. Direktoristubs/react/,stubs/livewire/, rutepasax-web.php/pasax-web-react.php, stub rutepasax-livewire/pasax-react, dan tag publishstarterkit-*/staterkit-*/pasax-web-{react,tsx,all}dihapus.pasax:installdanpasax:upgradeotomatis membersihkan sisaresources/js/pages/pasax+resources/js/components/pasaxdari instalasi lama;pasax:upgradememperingatkan bilaPASAX_DASHBOARD_DRIVERmasih bernilai warisan (livewire/react/tsx). Kunci configdashboard.driverdipertahankan sebagai no-op kompatibilitas (selalu diperlakukanblade). Aplikasi React/Inertia yang butuh panel dalam stack-nya dapat membangun dashboard kustom via headless REST API/api/security/*(lihat panduan integrasi React/Inertia).
Added#
Banner + dialog pengumuman otomatis di halaman utama: middleware baru
InjectAnnouncementBanner(aliaspasax.announce) menyuntikkan banner atas + dialog sambutan pada respons HTMLGET /tanpa mengubah view host — mandiri (tanpa dependensi), banner tampil sampai ditutup, dialog sekali per versi paket, nonaktif viaPASAX_ANNOUNCEMENT_ENABLED=false. Terdaftar otomatis saatauto_register_middlewareaktif dan disematkan installer ke grup global.CRUD Allowed IPs (global allowlist): model
AllowedIp+ tabelallowed_ips(migrasi baru untuk instalasi lama, plus masuk migrasi konsolidasi), pola IP tunggal/wildcard/CIDR yang ikut diperiksaisWhitelisted(), endpoint APIallowed-ips.*(index/store/show/toggle/destroy, admin-only), halaman dashboard Blade murni + Livewire + React/TSX, entri navigasi, dan relasi$user->allowedIps(). Uninstall ikut menghapus tabelnya.Halaman detail dashboard (Logs, Blocked IPs, Appeals): rute
logs/{id},blocked-ips/{id},tickets/{id}(*.show) di semua varian (Blade, Livewire, React, gabungan) dengan tampilan evidence/konteks request, log pemicu, tiket terkait, dan aksi langsung (hapus, toggle/unblock, approve/reject). Kolom Detail ditambahkan di ketiga tabel index.Toggle dark mode manual di semua stack dashboard (Blade, Livewire, React): tombol Auto → Terang → Gelap di navigasi, tersimpan di
localStorage(pasax-theme), tanpa flicker (tema diterapkan sebelum paint). Layout Blade kini memakaicolor-schemedan background body mengikuti tema (sebelumnya body terkunci terang).Ringkasan akhir
pasax:installmencantumkan URL akses dashboard (overview, logs, blocked-ips, server, sessions, tickets, settings) berdasarkanAPP_URL+ prefix terkonfigurasi, plus langkah khusus untuk pilihan Livewire saja.Overview Livewire:
topAttackersdikonversi viatoArray()(sebelumnya(array)cast pada Eloquent Model menghasilkan key internal sehingga badge level/timestamp memicu warning dan data hilang). Ditemukan saat uji starter kit Livewire asli.syncDashboardChoiceditulis ulang tanpa pola&&yang selalu benar (CI PHPStanbooleanAnd.leftAlwaysTruepadaSecurityInstallCommand.php:527); perilaku strict-by-choice tidak berubah.Varian stub rute per-driver (
stubs/routes/pasax-blade/livewire/react.php.stub):pasax:installkini menulisroutes/pasax.phphanya berisi rute stack terpilih (varian gabungan untukboth; file dilewati untuknone/--api-only). Stub gabunganpasax.php.stubtetap dipakai untukbothdan sinkronisasipasax:upgrade --sync-routes.
Fixed#
pasax:installstrict by choice: installer kini menghapus direktori dashboard dari stack yang TIDAK dipilih (syncDashboardChoice), sehingga hasil instalasi hanya berisi pilihan user —plain/livewirehanya menyisakanresources/views/pages/pasax,reacthanyaresources/js/pages+components/pasax,none/--api-onlymenghapus keduanya.- Stub
routes/pasax.phpmenghormatidashboard.driver: cabang Livewire kini mensyaratkandriverbernilailivewire/all/both(sebelumnya hanyaclass_exists(Livewire), sehingga app Blade yang kebetulan memasang Livewire jatuh ke rute Livewire walau memilih plain). - Ringkasan akhir instalasi ganda untuk plain: baris duplikat "Dashboard Blade: ..." dihapus, tersisa satu baris "Dashboard Blade murni: ...".
pasax:uninstallmembersihkan blok$middleware->append([])yang kosong dibootstrap/app.php(regex lama hanya cocok pola panah ganda).
Verified#
- Suite 136 passed (577 assertions) termasuk 3 test baru strict-by-choice (plain menghapus sisa React, react menghapus sisa Blade, api-only menghapus keduanya) + asersi uninstall tanpa sisa
->append.
[1.1.5] - 2026-10-11#
Added#
- Plain-Blade monitoring dashboard (no Livewire/Inertia required): new
stubs/blade/pages/pasax/views (standalone layout + Overview, Logs, Blocked IPs, Server, Sessions, Appeals, Settings) published withphp artisan vendor:publish --tag=plain-viewsorphp artisan pasax:install --with-plain/--with-blade. Dashboard controllers now dual-render viaRespondsWithDashboard: driverblade(new default) serves plain views,reactserves Inertia, with graceful fallback when a stack is missing. - Dashboard route file for plain Blade (
routes/pasax-web-blade.php) covering all CRUD endpoints with the samepasax.dashboard.*names. - Installer wizard choice for plain Blade (auto-default when Livewire is absent),
--with-livewireflag, and--stackvaluesblade/livewire.
Changed#
- BREAKING (minor, pre-1.2):
--with-bladenow means plain Blade (was Livewire alias); use--with-livewire/--with-dashboardfor the single-file Livewire version.--with-bothand--stack=bothnow pair plain Blade + TSX. - Dashboard
driverdefault is nowblade;livewireonly serves the Livewire routes. - Fixed the
routes/pasax.phpstub fallback which rendered non-existentpages.security.*views; it now wires the dashboard controllers directly. Default dashboard prefix in stubs corrected topasax. pasax:upgradeblade sync follows the host stack (Livewire tag vsplain-views).
Verified#
- All 7 plain-Blade pages render HTTP 200 with working mutations on a real
laravel newapp; suite at 133 passed (566 assertions).
[1.1.4] - 2026-10-11#
Fixed#
- Dashboard styling gaps: added 5 missing CSS classes to the Livewire layout (
sec-badge-warning,sec-card-body,sec-card-desc,sec-content,sec-label) plus scope-selector styles; replaced emoji nav icons with inline SVGs on Blade and React. - React dashboard:
pasax-nav.tsxno longer hardcodes/security(prefix derived at runtime); added missingsec-header/title/subtitle,sec-alert*,sec-card-desc,sec-badge-warningstyles; fixedui.tsxprop types (id,onKeyDown,title,warning) —tsc --noEmitandvite buildpass. - Dashboard controllers rendered
Inertia::render('security/*')while pages live atjs/pages/pasax/*— corrected topasax/*. pasax:uninstallleft migration records behind, so reinstalls reported "Nothing to migrate" with missing tables (dashboard 500s). Uninstall now deletes its migration rows; legacysecurity_*tables are also dropped.
Verified#
- Render-tested on real Livewire + React apps (login, all pages 200, block-IP mutation persisted).
[1.1.3] - 2026-10-11#
Fixed#
PasaxService::VERSIONwas stale (2.0.8), makingpasax:upgradereport a phantom version and silencing update notices. Synced to the release line;push.shnow rewrites the constant to the new tag on every push.- Installer/uninstaller normalize edited host files (single trailing newline, collapsed blank lines) so they stay Pint-clean;
laravel-test/excluded frompint.json. - Install guide curl probe documented the localhost whitelist exclusion (
PASAX_IP_WHITELIST).
[1.1.2] - 2026-10-11#
Changed#
- Internal maintenance commit (no user-facing changes).
[1.1.1] - 2026-10-11#
Added#
- Interactive install wizard (
php artisan pasax:install): language choice (ID default / EN,--lang), API-only mode (--api-only: core + security, no pages or web dashboard routes), starterkit picker (Livewire / React / both / none, skipped for API-only), environment readiness check (PHP, Laravel, DB,.env), optional immediatephp artisan migrate, and numbered next steps each with a docs link tohttps://pasax.is-a.dev/. - New
--with-tsx,--with-both,--stackhandling unified with the wizard.
[1.1.0] - 2026-10-11#
Fixed#
- Quoted Mermaid node labels containing
()(User::logins(),Gate::define(...)) which broke diagram rendering in the docs portal and Starlight site.
[1.0.10] - 2026-10-11#
Changed#
- Docs: last
security.activityalias references renamed topasax.activity.
[1.0.9] - 2026-10-11#
Changed#
- Docs: stale middleware aliases,
manage-security-monitorgate, andsecurity.*route names updated topasax.*across guides.
[1.0.8] - 2026-10-11#
Fixed#
- BREAKING (minor, pre-1.1):
pasax:upgradeno longer force-overwrites customized host routes/views;--sync-routes/--sync-viewsback up to*.backup-*first. - Fixed installer writing
require security.php(non-existent file, fatal on hosts) instead ofrequire pasax.php, plus duplicate-require guard. - New
PasaxLifecycleEdgeTest(10 simulations): fresh/partial/legacy hosts, Laravel 10 Kernel style, combined-trait removal, upgrade backup behavior.
[1.0.7] - 2026-10-11#
Added#
- New
php artisan pasax:uninstallcommand: removes all package traces from host apps without breaking them — drops only Pasax tables, removes published routes/config/views/migrations, detaches middleware and the User trait, stripsPASAX_*from.env, restores.htaccessfrom backup, and runscomposer remove. Supports--force,--keep-tables,--keep-env.
[1.0.6] - 2026-10-11#
Changed#
- Auto-generated web-docs files (
changelog.md,src/data/package.json) are untracked + gitignored sogit pullnever conflicts with local build output.
[1.0.5] - 2026-10-11#
Added#
- Root
finis.shwrapper forwarding toweb-docs/finis.shso docs build/deploy runs from the repo root without changing directories.
[1.0.4] - 2026-10-11#
Changed#
push.shnow regeneratesdocuments/index.htmland runs the web-docs build (finis.sh --no-pull --no-deploy) before every commit (--no-docs-buildto skip).
[1.0.3] - 2026-10-11#
Changed#
- Docs: web-docs site titles, SEO keywords, tracker defaults, and integration-guide examples renamed to Pasax.
[1.0.2] - 2026-10-11#
Changed#
push.shversion policy: patch numbers cap at.10then roll over to the next minor (v1.0.10→v1.1.0); major bumps are never automatic — only via explicit-t vX.0.0.
[1.0.1] - 2026-10-11#
Changed#
push.shauto-tags every push with the recommended version (opt out with--no-tag); Dependabot config ignores major updates to protect the CI matrix.
[1.0.0] - 2026-10-11#
Changed#
- BREAKING — package renamed to
pasax/secure-monitor: namespaceInternal\SecurityMonitor→Internal\Pasax;SecurityMonitorService→PasaxService;SecurityMonitorServiceProvider→PasaxServiceProvider; facadeSecurityMonitor→Pasax. Backward-compatible class aliases ship insrc/compat.php. - BREAKING —
pasaxnaming across the stack:config/security.php→config/pasax.phpwithPASAX_*env vars (legacySECURITY_*still work as fallback); Artisansecurity:*→pasax:*; middleware aliasespasax.*; gatemanage-pasax; single consolidated migrationcreate_pasax_tableswithpasax_logs/pasax_settingstables (legacy tables auto-renamed with data preserved).
[2.1.0] - 2026-10-09#
Added#
- Hardened Apache 2 VirtualHost Configuration (
stubs/apache2.conf.stub):- Menyediakan template VirtualHost Apache 2 hardened siap pakai untuk server Ubuntu / Debian / CentOS.
- Tag vendor publish baru:
php artisan vendor:publish --tag=security-apache(menghasilkan berkasapache2.confdi root aplikasi host). - Terintegrasi penuh ke dalam perintah instalasi
php artisan security:installdan grup tag--tag=security-all. - Opsi CLI baru:
--without-apachepadaphp artisan security:installuntuk melewati publikasiapache2.conf. - Fitur pengamanan VirtualHost mencakup:
- Mitigasi Slowloris DoS via
mod_reqtimeout(header=15-30,MinRate=500 body=15,MinRate=500). - Buffer request body (5MB) dan header buffer (
LimitRequestFieldSize 32768) untuk mencegah DoS dan error token JWT/Cookie besar. - Penolakan HTTP method berisiko (
TRACE,TRACK) untuk mitigasi Cross-Site Tracing (XST). - Header keamanan lengkap:
X-Frame-Options,X-Content-Type-Options: nosniff,Referrer-Policy,Permissions-Policy, dan penyembunyianX-Powered-By. - Resolusi IP asli via
mod_remoteip(X-Forwarded-For/CF-Connecting-IP). - Restriksi eksekusi PHP: hanya
/index.phpyang diizinkan dieksekusi, semua berkas.phplain ditolak dengan 403 Forbidden. - Pencegahan eksekusi berkas double extension (
.php.jpg,.phtml.zip, dll.). - Sandboxing folder
/storage/denganContent-Security-Policy: sandboxuntuk mencegah eksekusi polyglot/SVG berbahaya. - Integrasi PHP-FPM aman melalui
mod_proxy_fcgi.
- Mitigasi Slowloris DoS via
[2.0.10] - 2026-10-09#
Changed#
- Hardening Template Nginx (
stubs/nginx.conf.stub):- Peningkatan FastCGI buffer:
fastcgi_buffers 16 16k;,fastcgi_buffer_size 32k;,fastcgi_busy_buffers_size 64k;untuk mencegah 502 Bad Gateway saat respons besar. - Penambahan buffer header klien (
client_header_buffer_size 16k;,large_client_header_buffers 4 32k;). - Penambahan timeout mitigasi Slowloris DoS (
client_body_timeout 15s;,client_header_timeout 15s;,send_timeout 15s;). - Restriksi HTTP method (
GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS). - Blueprint pemulihan real IP dari reverse proxy / Cloudflare / Docker.
- Peningkatan FastCGI buffer:
[2.0.9] - 2026-10-05#
Fixed#
- Kompatibilitas CI & Test Matrix L10 - L13:
- Menambahkan dependensi
guzzlehttp/guzzle: ^7.8|^8.0padacomposer.jsonuntuk menjamin ketersediaan PSR-7 Response saat pengujianHttp::fake()dan fiturVersionCheckServicepada lingkungan Laravel 10. - Memperbaiki analisis statis PHPStan pada evaluasi tipe dinamis
LoginThrottleServicedanSecurityInstallCommand. - Mengoptimalkan assertion command options pada
SecurityInstallAutoInjectTest.
- Menambahkan dependensi
[2.0.8] - 2026-10-05#
Added#
Pemeriksaan Versi Otomatis & Notifikasi Upgrade di Terminal (
php artisan serve&composer run dev):- Secara otomatis memeriksa apakah terdapat versi rilis terbaru di Packagist/GitHub saat pengembang menjalankan
php artisan serveataucomposer run dev(artisan dev). - Menampilkan notifikasi visual di terminal konsol yang elegan dan informatif jika versi baru telah dirilis, lengkap dengan saran perintah upgrade.
- Pemeriksaan dirancang sangat ringan, non-blocking (timeout 2 detik), dan di-cache selama 1 jam (
SECURITY_VERSION_CHECK_CACHE_TTL=3600) sehingga tidak pernah memperlambat atau mengganggu startup server. - Dapat diaktifkan/dinonaktifkan melalui konfigurasi
security.version_check.enabledatau variabel.env:SECURITY_VERSION_CHECK_ENABLED=true.
- Secara otomatis memeriksa apakah terdapat versi rilis terbaru di Packagist/GitHub saat pengembang menjalankan
Perintah Baru
php artisan security:upgrade:- Perintah artisan terpadu untuk memeriksa, memperbarui, dan menyinkronkan seluruh komponen package:
php artisan security:upgrade: Memperbarui package via Composer (composer update pasax/secure-monitor), menerapkan migrasi database terbaru (php artisan migrate), menyinkronkan rute kustom (routes/security.php&routes/security-api.php), menyinkronkan tampilan dashboard monitoring (Blade/Livewire & React/TSX), serta membersihkan cache framework.- Opsi
--check: Hanya memeriksa status versi tanpa menjalankan proses pembaruan. - Opsi
--force: Memaksa pembaruan dan sinkronisasi aset meskipun sudah di versi terbaru. - Opsi
--no-composer: Melewati pembaruan Composer (hanya sinkronisasi aset lokal). - Opsi
--no-migrate: Melewati eksekusi migrasi database. - Opsi
--sync-routes&--sync-views: Memaksa pembaruan berkas rute dan tampilan dashboard.
- Perintah artisan terpadu untuk memeriksa, memperbarui, dan menyinkronkan seluruh komponen package:
Integrasi Informasi Versi pada Dashboard Pengaturan & REST API:
- Halaman Pengaturan Keamanan (
/security/settings) pada Livewire dan React kini menampilkan status versi aktif dan banner notifikasi pembaruan secara visual. - Endpoint REST API
GET /api/security/settingsmenyertakan metadataversion(current,latest,update_available).
- Halaman Pengaturan Keamanan (
[2.0.7] - 2026-10-05#
Added#
- Interactive Security Settings Page & Dynamic Configuration (Livewire, React, & REST API):
- Added dedicated Security Settings dashboard page accessible via
/security/settingsin both Livewire (pages/security/settings.blade.php) and React (pages/security/settings.tsx). - Added Settings link (⚙️) to the sidebar navigation in both Blade and React dashboard layouts.
- Interactive radio cards allowing administrators to configure blocking scope with clear visual guidance:
- Isolasi Perangkat Saja (
device) (Default / Rekomendasi): Only quarantines the offending device based on Device ID / Fingerprint / LAN IP, keeping innocent users sharing the same WiFi or NAT router completely safe. - Seluruh IP Router Publik (
ip): Quarantines the entire public router IP address.
- Isolasi Perangkat Saja (
- Dynamic configuration controls for:
- Automatic blocking scope (
auto_block_scope:deviceorip) - Zero tolerance instant blocking scope (
instant_block_scope:deviceorip) - Threshold count (
auto_block_threshold) - Accumulation window in minutes (
auto_block_window) - Quarantine duration in hours (
auto_block_duration) - Zero tolerance instant duration (
instant_block_duration) - HTTP 403 block enforcement master toggle (
block_enforcement)
- Automatic blocking scope (
- Dynamic multi-layer persistence:
SecuritySettingdatabase model/migration, high-performance in-memory and Cache layer, with automatic.envsynchronization. - Headless REST API endpoints:
GET /api/security/settings(retrieves current configuration)POST /api/security/settings(updates and applies settings with zero downtime)
- Added comprehensive feature tests in
tests/Feature/SecuritySettingsTest.php.
- Added dedicated Security Settings dashboard page accessible via
[2.0.6] - 2026-10-05#
Added#
- Device-Scoped Automatic & Instant Blocking (WiFi & NAT Router Isolation):
- Enforced device-level isolation for both threshold-based automatic blocking (
autoBlockIfNeeded) and zero-tolerance instant blocking (blockImmediately), ensuring that only the specific attacking device is quarantined rather than blocking the entire public router IP or office/cafe WiFi network. - Innocent users and colleagues sharing the same NAT public IP address can continue accessing the application without being affected or receiving HTTP 403 Forbidden.
- Added configurable blocking scopes in
config/security.phpandstubs/env.stub:SECURITY_AUTO_BLOCK_SCOPE=device(options:deviceorip, default:device).SECURITY_INSTANT_BLOCK_SCOPE=device(options:deviceorip, default:device).
- Deterministic client device fingerprinting (
generateDeviceFingerprint()): automatically synthesizes client identifiers (dev_*) from User-Agent, language, and client platform hints when custom headers (X-Device-Id,X-Client-Id) are not explicitly sent. - Persistent device cookie attachment:
BlockIpAddressmiddleware attaches anapp_device_idcookie to responses (including 403 Forbidden response pages) to guarantee seamless device tracking across subsequent visits. - Updated
LogFailedLoginAttemptandLoginThrottleServiceto track and pass device IDs and private LAN IPs discovered via WebRTC to brute-force lockout evaluations. - Added end-to-end feature tests in
tests/Feature/DeviceLevelBlockingTest.phpverifying that two clients on the identical public router IP (REMOTE_ADDR) are isolated so that the attacker receives 403 Forbidden while the innocent device receives 200 OK.
- Enforced device-level isolation for both threshold-based automatic blocking (
[2.0.5] - 2026-10-05#
Added#
- Automated API Setup & Customizable Route Files (
routes/security.php&routes/security-api.php):- Automatically checks and executes
php artisan install:apiduringsecurity:installif API routes are not yet initialized in Laravel 11/12/13 host applications. - Generates
routes/security-api.phpfor headless REST API endpoints and wires it intoroutes/api.php(require __DIR__.'/security-api.php';). - Generates
routes/security.phpfor web dashboard routes and wires it intoroutes/web.php(require __DIR__.'/security.php';). - Web routes in
routes/security.phprender directly to views (pages::security.*/resources/views/pages/security/*for Livewire/Blade or Inertia controllers for React) so developers have full control to customize URL prefixes, middleware, layout wrappers, and custom pages. - Added
security-routes,security-routes-web, andsecurity-routes-apipublication tags tophp artisan vendor:publish. - Added
--without-routesand--without-apiflags tophp artisan security:install. - Smart route loading in
PasaxServiceProvider: prioritized host route files if customized and prevents route duplication with hostroutes/web.phpandroutes/api.php.
- Automatically checks and executes
[2.0.4] - 2026-10-05#
Added#
- Pure Vanilla CSS Architecture for Dashboard Views:
- Migrated both Blade (Livewire) and React (TSX) dashboard stubs to pure Vanilla CSS.
- Eliminated external UI library dependencies (removed Livewire Flux UI, Shadcn UI,
@/lib/utils, andsonner). - Added standalone
security.cssstylesheet and zero-dependencyui.tsxhelper components (Card,Button,Badge,Input,Label). - Unified themeable CSS Custom Properties (
--sec-*) with built-in automatic dark mode (prefers-color-scheme: darkand.dark/[data-theme="dark"]). - 100% responsive layout across mobile, tablet, and desktop viewports with accessible modal dialogs and pure CSS trend chart bars.
[2.0.3] - 2026-10-05#
Added#
- Automated Host Setup in
security:install:- Automatically detects and injects the
HasSecurityRelationstrait and import intoapp/Models/User.php. - Automatically registers WAF middlewares (
BlockIpAddressandDetectSecurityThreats) inbootstrap/app.php(Laravel 11 & 12) orapp/Http/Kernel.php(Laravel 10). - Both injections are idempotent and preserve existing code formatting and PHPDoc tags.
- Added
--without-user-traitand--without-middlewareflags to bypass automatic registration if needed.
- Automatically detects and injects the
[2.0.2] - 2026-10-04#
Added#
- Blade & TSX Starter Kit Tags:
- Added
--with-blade,--with-tsx, and--with-allflags tophp artisan security:installalongside interactive stack selection. - Added
starterkit-blade,starterkit-tsx,starterkit-all,security-dashboard-blade,security-dashboard-tsx, andsecurity-dashboard-allpublication tags. - Enforced authentication and login requirement across all
/securitymonitoring routes.
- Added
[2.0.1] - 2026-10-03#
Changed#
- Refinements to post-2.0.0 headless architecture and route bindings.
[2.0.0] - 2026-10-03#
Changed#
- BREAKING — version corrected to a major. Removing the CAPTCHA subsystem
deletes public API (
CaptchaService,ValidCaptcha,CaptchaApiController), routes, config keys, andCAPTCHA_*environment variables, so it is a breaking change. The same removal was briefly tagged1.1.4;2.0.0is the canonical release. See the1.1.4entry below for the full list of removals.
[1.1.4] - 2026-10-03#
Removed#
- CAPTCHA subsystem removed. The zero-dependency SVG CAPTCHA has been
dropped to keep the package focused on WAF/threat protection. Deleted:
CaptchaService,ValidCaptcharule,CaptchaApiController, the/api/security/captchaendpoints, thesecurity.captchaconfig block, and theCAPTCHA_*environment variables. Login brute-force protection is still provided by the multi-tier stepped login lockout.
[1.1.3] - 2026-10-03#
Added#
- Log4Shell / JNDI detection (
log4shell_jndi): new zero-tolerance instant-block signature that detects${jndi:...}payloads in any request part (User-Agent, query string, body, headers), including the common obfuscations${${lower:j}ndi:...}and${j${lower:n}di:...}as well as URL-encoded forms such as%24%7Bjndi%3A.... Previously these payloads were neither detected nor logged, so a Log4Shell probe passed straight through.
Changed#
- README: the install command now uses the explicit stable constraint
(
composer require pasax/secure-monitor:^1.1) and warns against@dev, which forces the unreleaseddev-mainbranch instead of a tagged release.
[1.1.2] - 2026-10-02#
Changed#
- README: installation guidance refresh (explicit stable constraint and the
@devwarning).
[1.1.1] - 2026-10-02#
Changed#
- Distribution: the Astro documentation site (
web/) and thedocuments/folder are now excluded from the Composer/Packagist archive viaexport-ignoreandarchive.exclude. The previous/DOCSentry was case-sensitive and never matched the lowercasedocuments/folder, so the documentation was shipped to consumers by accident.
Added#
- Official documentation site (Astro + Starlight) maintained in a separate
repository (
pasax-dev/web-laravel-security). It is not part of the package distribution.
[1.1.0] - 2026-10-02#
Added#
- Livewire Starter Kit monitoring dashboard (optional): publish six
single-file Livewire pages (Overview, Security Logs, Blocked IPs, Server
Audit, User Sessions, Unblock Appeals) with
php artisan vendor:publish --tag=starterkit-livewire. The dashboard is disabled by default and served under/securitybehind theweb+auth+security.adminmiddleware. - React (Inertia) Starter Kit monitoring dashboard (optional): publish six
server-rendered Inertia + React pages and shared components with
php artisan vendor:publish --tag=starterkit-react. Backed by the newInternal\Pasax\Http\Controllers\Dashboard\*controllers, so no separate API token is required. Enable withSECURITY_DASHBOARD_DRIVER=react. --with-dashboardand--with-react-dashboardoptions onphp artisan security:install.documents/generate.php: regenerates thedocuments/index.htmlportal (Tailwind CSS Play CDN + marked.js + Mermaid.js) from the markdown chapters.
Changed#
- The
dashboardconfiguration block gained adriveroption (livewire|react) and the newSECURITY_DASHBOARD_DRIVERenvironment variable. Both starter-kit dashboards share the same route prefix and authorization middleware. - The documentation portal
documents/index.htmlnow uses the Tailwind CSS Play CDN instead of hand-written CSS, and its content is generated from the markdown chapters so it never drifts fromdocuments/.
Documentation#
- Documented the Livewire and React dashboards in the README, the installation
guide, and the frontend integration guides, including the new
.envvariables (SECURITY_DASHBOARD_ENABLED,SECURITY_DASHBOARD_DRIVER,SECURITY_DASHBOARD_PREFIX).
[1.0.12] - 2026-10-02#
Fixed#
- PHP 8.2 / 8.3 compatibility (critical):
UserLoginServicechained a method call directly off anewexpression (new $model()->newQuery()). That syntax only parses from PHP 8.4, so on PHP 8.2/8.3 it raised aParseErrorthat failed every PHP 8.2/8.3 test-matrix job as well as the Pint job. It now uses$model::query(), which parses and formats identically on every supported PHP version. - PHPStan: the
view()->exists('errors.blocked')suppression now matches both thetrueandfalseevaluation, since the result depends on whether the host application has published the view.
[1.0.11] - 2026-10-02#
Fixed#
- CI:
laravel/pintandlarastan/larastanare no longerrequire-devdependencies. Pint requires PHP 8.3 and Larastan 3 requires Laravel 11+, which broke the PHP 8.2 / Laravel 10 matrix jobs. Both tools are now installed only in their dedicated CI jobs; runcomposer dev:toolslocally to use them. - PHPStan: replaced the environment-dependent
view()->exists()ignore with an identifier-scoped ignore forsrc/Http/Middleware/BlockIpAddress.php.
[1.0.10] - 2026-10-02#
Changed#
- The application audit now reads
PUBLIC_API_KEYandTRUSTED_PROXIESviaconfig('security.server_scan.*')instead of callingenv()inside a service, and the weak-key placeholder list no longer references an app-specific value.
Fixed#
- PHPStan: added
tests/*-scoped ignores for Pest's magic$this/TestCallso IDE analysis of the test suite stays quiet, plusreportUnmatchedIgnoredErrors: false.
[1.0.9] - 2026-10-02#
Added#
- Static analysis setup: Larastan + PHPStan (
phpstan.neon.dist,phpstan-baseline.neon), acomposer analysescript, and a dedicated "Static Analysis" CI job. - Regression tests covering the CAPTCHA endpoint, login recording, session logout, trusted IP storage, admin auto-unblock, and server scan with admins.
Fixed#
pushMiddleware()was called on theIlluminate\Contracts\Http\Kernelinterface; middleware auto-registration now narrows to the concrete Foundation kernel before calling it.CaptchaApiControllercalled the protectedCaptchaService::render(); the public/captchaendpoint now usesgenerate()and verifies with the correct signature.- Several listeners and services referenced a non-existent
Userclass (RecordUserLogin,ResetLoginAttempts,UserLoginService::trustIp(),UserLoginService::getRealtimeActiveUsers(), andServerSecurityService::accountChecks()), which silently disabled login recording, admin auto-unblock, and the 2FA server audit. All now resolve the configured user model dynamically. - Added the missing
UserLoginService::logoutSession()method used by the admin session endpoint. - Corrected model relationship PHPDoc that referenced a non-existent
Userclass, and usedgetAuthIdentifier()where the authenticated user contract is in play.
[1.0.8] - 2026-10-02#
Added#
- Publishable default 403 page
resources/views/errors/blocked.blade.php(vendor:publish --tag=security-views), including a self-contained appeal form wired to the public unblock-ticket endpoint. Integrated intosecurity:installwith a new--without-viewsoption. - Laravel Pint configuration (
pint.json),composer format/composer lintscripts, and a dedicated "Code Style" CI job.
Changed#
- Applied Laravel Pint code style across the source and test suites.
[1.0.7] - 2026-10-02#
Added#
- Presentation deck for the package under
paparan/(Laravel-Security-Monitor-Bulwark.pptx, 20 slides) with a reproducible generator (paparan/generate.php). Excluded from the Composer distribution.
[1.0.4] - 2026-10-02#
Changed#
- Exclude development-only assets (
.agents/,AGENTS.md,DOCS/,.github/,push.sh) from the Composer distribution archive via.gitattributesexport-ignorerules and thearchive.excludeComposer setting, socomposer requireinstalls only the runtime package.
[1.0.0] - 2026-10-01#
Added#
- Self-Hosted WAF & Threat Engine:
- Zero-tolerance instant block signatures (null byte, double extensions, path traversal, webshell probes, SSTI canary, polyglot uploads).
- Multi-tier progressive threat scoring and auto-blocking with sliding time windows.
- ReDoS-hardened regex patterns tuned against real-world incidents.
- Reverse proxy support (
CF-Connecting-IP,X-Real-IP,X-Forwarded-For).
- Device-Level Quarantine & Scope:
- Granular blocking via
device_idandlocal_ip(WebRTC / device fingerprint) to avoid punishing innocent users on shared NAT/router public IPs. - Block scopes:
ip(entire router) vsdevice(specific client device).
- Granular blocking via
- Public Appeal & Ticket Submissions:
- Public headless REST API for unblock appeal ticket submission and verification.
- Admin approval/rejection endpoints with automatic IP/device quarantine release.
- Multi-Tier Stepped Login Protection:
- Stepped progressive lockouts (1m -> 5m -> 15m -> 1h -> 24h) preventing brute force and credential stuffing attacks.
- Automatic failed login security event logging.
- Zero-Dependency SVG CAPTCHA:
- Pure SVG vector-matrix challenge generator without GD or Imagick PHP extension requirements.
- Cryptographically secure one-time stateless session tokens.
- Server Integrity & Security Scanner:
- SHA-256 baseline creation and change verification.
- Suspicious file & webshell scanner with safe admin deletion capabilities (traversal protected, vital files protected).
- Server configuration audit (PHP version, debug mode, HTTPS cookies, Fortify 2FA).
- Apache / Nginx Access Log Scanner:
- Streaming log parser to detect web attacks rejected before reaching Laravel.
- Auto-import and zero-tolerance IP blocking from raw server logs.
- Headless REST API Architecture:
- 100% decoupled from any specific frontend (React/Inertia/Blade/Livewire/Mobile).
- Pure JSON endpoints for logs, blocked IPs, server scans, sessions, appeals, and captcha.
- Enterprise Extensibility:
- Configurable user model (
config('security.user_model')). - Configurable table names (
config('security.table_names.*')). HasSecurityRelationsmodel trait for seamless user relationship bindings.- Laravel 10, 11, 12, and 13 compatibility.
- Configurable user model (