Semua panduan
Tingkat SedangPenanganan Error & Ketahanan

Halaman error verbose dan stack trace di production

Ketika exception yang tidak tertangani atau probe ke route yang tidak ada memicu tampilan error debug framework di production, hal itu dapat menyerahkan peta server Anda kepada penyerang: path file, nomor baris, versi library, dan terkadang environment variable. Perbaikannya adalah mengembalikan respons error generik ke pengguna sambil mencatat detail lengkap hanya ke layanan sisi server yang dikendalikan tim Anda.

Apa itu

Setiap framework web dilengkapi tampilan error debug bawaan — halaman exception kuning Django, layar Ignition Laravel, overlay development Next.js, dump exception default Express. Semua ini sangat berguna selama development, tetapi sengaja dinonaktifkan di build production. Risikonya adalah halaman error framework yang tetap aktif karena mode debug tidak dimatikan, atau error handler kustom yang mengembalikan objek exception mentah langsung di body respons.

AppSafe mendeteksi error verbose dengan meminta path yang seharusnya tidak ada di situs Anda. Jika body respons cocok dengan pola umum halaman error framework — traceback Python, dump exception Node.js, detail exception .NET, path Rails.root, atau sejenisnya — temuan dilaporkan dengan tingkat keparahan sedang di kategori Penanganan Error & Ketahanan.

Kenapa penting

Stack trace mengekspos bahasa dan versi framework, struktur direktori internal aplikasi Anda, file dan baris persis yang gagal, serta rantai pemanggilan yang mengarah ke sana. Dipadukan dengan database CVE, informasi itu mempersingkat waktu dari penemuan hingga eksploit yang terarah — terutama untuk kerentanan yang diketahui pada versi framework atau library tertentu.

Halaman debug juga bisa menyertakan data request, sebagian environment variable, atau potongan SQL di output yang dirender, sehingga tanpa sengaja membocorkan input pengguna atau nilai internal server yang seharusnya tidak pernah sampai ke browser.

Cara memperbaiki

Jangan pernah mengembalikan exception mentah ke klien

Di API route dan Route Handler Next.js, tangkap exception secara eksplisit, catat error lengkapnya di sisi server, dan kembalikan status generik ke pemanggil.

// app/api/example/route.ts
export async function GET() {
  try {
    // ... handler logic ...
  } catch (err) {
    console.error(err); // logs stack trace to your server/monitoring only
    return new Response("Internal Server Error", { status: 500 });
  }
}
Konfigurasikan halaman error kustom

Next.js merender pages/500.tsx (atau app/error.tsx di App Router) untuk error yang tidak tertangani di production. Isi dengan pesan yang ramah — tanpa detail teknis — dan hubungkan layanan pemantauan error seperti Sentry untuk menangkap exception yang sebenarnya.

Cegat di lapisan proxy

Untuk error apa pun yang lolos dari lapisan aplikasi, nginx dapat mengganti semua respons 5xx dengan halaman statis sebelum mencapai browser.

error_page 500 502 503 504 /50x.html;
location = /50x.html {
  root /usr/share/nginx/html;
  internal;
}

FAQ

Apakah Next.js menampilkan stack trace di build production?

Overlay development sudah disembunyikan di production. Risiko sebenarnya adalah Route Handler atau API route kustom yang menangkap exception lalu men-serialisasinya langsung ke respons — sesuatu yang tidak akan dicegah framework dengan sendirinya.

Bagaimana AppSafe memeriksa error verbose?

AppSafe meminta URL yang tidak ada di situs Anda dan memindai body respons untuk frasa seperti 'Traceback (most recent call last)', 'Stack trace:', 'Unhandled Runtime Error', 'Exception Details:', dan penanda serupa dari framework Python, Node.js, PHP, Java, Ruby, dan .NET.

Halaman 404 saya tidak menampilkan stack trace tetapi AppSafe tetap menandainya. Mengapa?

Scanner mencocokkan sekumpulan pola yang luas, beberapa di antaranya muncul di respons error parsial atau yang disensor. Periksa apakah nama kelas exception, path file internal, atau identifier framework muncul di mana pun dalam body respons 404 atau 500 Anda — bahkan di komentar atau elemen tersembunyi.

Apakah aplikasimu terpengaruh?

AppSafe memeriksa ini dan puluhan masalah lain dalam satu pemindaian gratis.

Pindai aplikasiku gratis