𝗜 𝗔𝘂𝗱𝗶𝘁𝗲𝗱 𝗠𝘆 𝗦𝗶𝗱𝗲 𝗣𝗿𝗼𝗷𝗲𝗰𝘁𝘀 𝗳𝗼𝗿 𝗦𝗲𝗰𝘂𝗿𝗶𝘁𝘆 — 𝗛𝗲𝗿𝗲 𝗜𝘀 𝗪𝗵𝗮𝘁 𝗜 𝗙𝗼𝘂𝗻𝗱
Baru-baru ini, saya telah mengaudit semua projek sampingan saya. Saya memeriksa backend FastAPI, bot Telegram, dan aplikasi web saya. Saya fikir saya sudah berhati-hati.
Saya silap.
Saya menemui pepijat (bugs) sebenar yang telah saya lancarkan ke produksi. Ini bukan masalah teori. Ia adalah kesilapan yang saya lakukan semasa cuba bergerak pantas.
Berikut adalah isu-isu utama yang saya temui dan cara untuk memperbaikinya:
- Pengesahan Bersyarat (Conditional Authentication) Saya menulis kod yang hanya menyemak kunci API jika rahsia (secret) wujud. Jika saya terlupa menetapkan rahsia tersebut dalam persekitaran (environment) saya, semakan tersebut akan dilangkau sepenuhnya. Ini menyebabkan API saya terbuka kepada sesiapa sahaja.
- Cara Perbaiki: Jangan sesekali jadikan pengesahan sebagai sesuatu yang bersyarat. Jika rahsia hilang, aplikasi harus mengeluarkan ralat dan berhenti.
- Kebocoran Kunci dalam Sejarah Git Saya menemui kunci API lama dalam sejarah Git saya. Saya telah memindahkannya ke fail .env kemudian, tetapi Git menyimpan setiap versi lama kod anda selamanya.
- Cara Perbaiki: Anggap mana-mana kunci yang pernah dihantar (committed) ke Git sebagai telah diceroboh. Batalkan (revoke) kunci tersebut dengan segera. Gunakan alatan seperti
git-filter-repountuk membersihkan sejarah anda.
- Endpoint Debug yang Tertinggal Saya meninggalkan endpoint dalam produksi yang memaparkan konfigurasi pangkalan data dan tetapan sistem saya. Ini berguna semasa pembangunan tetapi berbahaya apabila aplikasi telah dilancarkan.
- Cara Perbaiki: Tambahkan pembuangan endpoint debug ke dalam senarai semak (checklist) penggunaan (deployment) anda.
- Mesej Ralat yang Terlalu Terperinci (Verbose) Saya memulangkan ralat sistem mentah kepada pengguna. Ralat ini mendedahkan laluan fail, jenis pangkalan data, dan versi perpustakaan (library) anda. Penyerang boleh menggunakan data ini untuk menyasarkan sistem anda.
- Cara Perbaiki: Log ralat penuh secara dalaman untuk kegunaan sendiri. Pulangkan mesej "Internal Server Error" yang umum kepada klien.
- XSS melalui innerHTML
Saya menggunakan
innerHTMLuntuk memaparkan data pengguna dalam frontend saya. Ini membolehkan penyerang menyuntik skrip ke dalam laman web anda.
- Cara Perbaiki: Sentiasa bersihkan (sanitize) data atau gunakan
textContentsebagai gantiinnerHTML.
- Ketiadaan Had Kadar (Rate Limiting) Saya mempunyai endpoint yang memanggil model AI yang mahal tanpa had. Seorang pengguna boleh menyebabkan bil yang sangat besar dalam masa beberapa minit sahaja.
- Cara Perbaiki: Pengesahan menghalang pengguna yang tidak dibenarkan. Had kadar (rate limiting) menghalang pengguna yang dibenarkan daripada menyalahgunakan sistem anda. Anda memerlukan kedua-duanya.
- Tetapan CORS yang Terlalu Terbuka
Saya menggunakan
allow_origins=["*"]dalam middleware saya. Ini membolehkan mana-mana laman web membuat permintaan ke API anda.
- Cara Perbaiki: Hanya benarkan domain khusus anda sahaja dalam produksi.
- File Leakage I wrote code that created temporary files but failed to delete them if the process crashed. These files stay on your server forever.
- Fix: Use a try-finally block to ensure files are deleted even if an error occurs.
Security issues are rarely intentional. They are the result of saying "I will fix this later." Later never comes.
Build security into your workflow from day one. Check your code before you commit and before you deploy.
Source: https://dev.to/justjinoit/i-audited-my-own-side-projects-for-security-issues-heres-what-i-found-1ahb