Security
Bosia menyertakan beberapa fitur keamanan yang diaktifkan secara bawaan.
Proteksi CSRF
Section titled “Proteksi CSRF”Semua request yang tidak aman (POST, PUT, PATCH, DELETE) divalidasi terhadap origin server. Ini menggunakan pendekatan yang sama seperti SvelteKit — memeriksa header Origin atau Referer.
- Method aman (GET, HEAD, OPTIONS) dikecualikan
- Request yang mengubah state tanpa
Origin/Refererditolak dengan kode 403 - Request lintas-origin dari origin yang tidak diharapkan diblokir
Konfigurasi
Section titled “Konfigurasi”Izinkan origin tambahan melalui variabel lingkungan CSRF_ALLOWED_ORIGINS:
CSRF_ALLOWED_ORIGINS=https://app.example.com, https://mobile.example.comCORS dinonaktifkan secara bawaan. Aktifkan dengan menyetel origin yang diizinkan:
CORS_ALLOWED_ORIGINS=https://app.example.com, https://admin.example.comPengaturan CORS tambahan:
CORS_ALLOWED_METHODS=GET, POST, PUT, DELETECORS_ALLOWED_HEADERS=Content-Type, AuthorizationCORS_EXPOSED_HEADERS=X-Request-IdCORS_CREDENTIALS=trueCORS_MAX_AGE=86400Request preflight OPTIONS ditangani secara otomatis saat CORS dikonfigurasi.
Header Keamanan
Section titled “Header Keamanan”Bosia menyetel header-header ini pada setiap response:
| Header | Nilai |
|---|---|
X-Content-Type-Options | nosniff |
X-Frame-Options | SAMEORIGIN |
Referrer-Policy | strict-origin-when-cross-origin |
Keamanan Cookie
Section titled “Keamanan Cookie”API cookie menyertakan beberapa proteksi:
- Pencegahan injeksi header — nilai yang mengandung
;,\r, atau\nditolak - Validasi SameSite — hanya
Strict,Lax, atauNoneyang diterima - Encoding otomatis — nilai cookie dienkode secara aman dengan
encodeURIComponent
Setel opsi cookie yang aman:
event.cookies.set("session", token, { path: "/", httpOnly: true, // not accessible via JavaScript secure: true, // HTTPS only sameSite: "Lax", // protects against CSRF maxAge: 60 * 60 * 24 * 7, // 7 days});Proteksi XSS
Section titled “Proteksi XSS”Data JSON yang disematkan dalam HTML yang dirender server diescap menggunakan serializer yang aman yang:
- Mengescap
<,>,&,',", dan karakter Unicode yang dapat keluar dari tag script - Menangani referensi sirkular dengan baik
Batas Ukuran Body Request
Section titled “Batas Ukuran Body Request”Ukuran body request dibatasi secara bawaan untuk mencegah denial-of-service:
BODY_SIZE_LIMIT=512K # defaultBODY_SIZE_LIMIT=1M # 1 megabyteBODY_SIZE_LIMIT=10M # 10 megabytesBODY_SIZE_LIMIT=Infinity # no limit (not recommended)Mendukung sufiks K (kilobyte), M (megabyte), dan G (gigabyte).
Proteksi Path Traversal
Section titled “Proteksi Path Traversal”Penayangan file statis dan halaman prerendered memvalidasi bahwa path file yang telah diselesaikan tetap berada dalam direktori yang diizinkan, mencegah serangan traversal ../.
Penanganan Error di Produksi
Section titled “Penanganan Error di Produksi”Pada produksi (NODE_ENV=production), stack trace dihapus dari response error untuk mencegah kebocoran detail internal ke klien.