Backup database yang terekspos: apa yang terjadi saat /backup.sql dapat dijangkau
Backup database — file .sql, dump terkompresi, arsip zip database — terkadang dibuat langsung di direktori yang dapat diakses web lalu dibiarkan di sana. Satu request yang berhasil ke /backup.sql atau /dump.sql menyerahkan setiap baris di setiap tabel kepada penyerang tanpa menyentuh logika aplikasi Anda.
Apa itu
Script backup, panel kontrol hosting, dan tool ekspor manual umumnya menulis file dump dengan nama yang mudah ditebak: backup.sql, dump.sql, database.sql, db.sql.gz, backup.zip. Ketika file ini masuk ke web root dan server tidak memblokirnya secara eksplisit, file itu menjadi file biasa yang bisa diunduh. Penyerang menjalankan scan otomatis yang meminta puluhan nama umum ini ke setiap host yang bisa mereka jangkau.
AppSafe memeriksa path yang paling umum — /backup.sql, /dump.sql, /database.sql, /db.sql.gz, dan lainnya — dan menandai path mana pun yang mengembalikan respons 200 dengan konten yang terlihat seperti dump SQL atau arsip. Pemeriksaan ini menangkap SQL teks biasa maupun format terkompresi.
Kenapa penting
Dump SQL berisi setiap baris di setiap tabel pada saat dibuat: akun pengguna, hash password, alamat email, data pribadi, token sesi, riwayat pembayaran, dan state internal aplikasi. Mengunduh dump hanya butuh satu request HTTP yang tidak meninggalkan jejak di log aplikasi Anda — web server menyajikannya seperti file statis biasa.
Tidak seperti API key yang bocor, database yang bocor tidak bisa dirotasi. Begitu seseorang memiliki salinan tabel pengguna Anda, pelanggarannya bersifat permanen bagi pengguna tersebut. Tergantung isi dump-nya, Anda mungkin wajib menyampaikan pemberitahuan pelanggaran data berdasarkan GDPR, CCPA, atau HIPAA, ditambah biaya operasional untuk memberi tahu setiap pengguna yang terdampak.
Cara memperbaiki
Perbaikan yang benar adalah menulis file backup ke direktori yang tidak bisa dijangkau web server — path seperti /var/backups/ atau bucket object storage dengan ACL privat, bukan subdirektori dari /var/www/. Tinjau cron job atau script backup dan perbarui path tujuannya.
Sebagai langkah defense-in-depth, tolak request untuk file SQL dan ekstensi arsip umum di level server, di mana pun file disimpan.
location ~* \.(sql|sql\.gz|bak|dump|tar|tar\.gz|tar\.bz2|zip)$ {
deny all;
return 404;
}Jika Anda menemukan file yang terekspos, segera hapus. Lalu telusuri bagaimana file itu bisa sampai di sana — perbaiki script atau proses yang menaruhnya, agar tidak muncul lagi pada jadwal berikutnya.
Setelah dibersihkan, pastikan path-path umum tersebut sudah terblokir.
for path in /backup.sql /dump.sql /database.sql /db.sql.gz; do
code=$(curl -so /dev/null -w "%{http_code}" "https://yourdomain.com$path")
echo "$path → $code"
done
# Every line must print 404FAQ
Bagaimana penyerang tahu harus mencoba /backup.sql di situs saya?
Mereka tidak menargetkan Anda secara khusus. Scanner otomatis terus-menerus meminta puluhan nama backup umum ke jutaan host. File yang ada akan mengembalikan 200 dan langsung diunduh sebelum Anda tahu harus mencarinya.
File itu hanya ada selama satu jam. Apakah kerusakannya sudah terjadi?
Mungkin saja. Scan otomatis berjalan sepanjang waktu dan file sering ditemukan dalam hitungan menit setelah muncul. Jika Anda punya access log, periksa apakah path tersebut pernah diminta — jika ya, perlakukan sebagai pelanggaran yang terkonfirmasi.
Bisakah saya melindungi file dengan password saja daripada memindahkannya?
Basic auth pada satu file itu rapuh dan mudah salah konfigurasi. Jawaban yang tepat adalah menghapus file dari lokasi mana pun yang dapat diakses web. Backup harus disimpan di tempat yang tidak bisa dijangkau server HTTP.
Apakah aplikasimu terpengaruh?
AppSafe memeriksa ini dan puluhan masalah lain dalam satu pemindaian gratis.
Pindai aplikasiku gratisPanduan terkait
Indeks direktori terbuka: saat file server Anda menampilkan semuanya
File server yang menampilkan isinya memberi penyerang inventaris gratis.
File .env yang terekspos: cara penyerang menemukan rahasiamu
Satu .env yang bisa dijangkau bisa menyerahkan seluruh stack-mu.
Supabase Row Level Security (RLS): kunci tabel-tabelmu
Anon key-mu bersifat publik. RLS satu-satunya penghalang antara key itu dan datamu.
Direktori .git yang terekspos: kebocoran source code yang tersembunyi di depan mata
/.git yang dapat dijangkau menyerahkan seluruh codebase dan riwayat commit Anda.