Lalai Boleh Menenggelamkan Anda
TL;DR: Anggap respons yang tidak diketahui sebagai tidak dibenarkan, tidak sah.
Masalah
- Risiko keselamatan
- Mengabaikan kes yang tidak diketahui
- Ralat Salah Tafsiran
- Lalai kepada keadaan yang sah
- Keizinan Tidak Padan
- Gagal mencatat peristiwa
- Potensi Eksploitasi
Penyelesaian
- Sahkan semua respons terhadap set tertutup kod yang diketahui.
- Lalai (dan tidak diketahui) kepada yang tidak dibenarkan atau Alih Keluar Lalai .
- Log setiap kes yang tidak sepadan atau tidak dijangka untuk analisis.
- Uji dengan senario kelebihan.
- Segerakkan kumpulan tindak balas dengan pemproses dengan kerap untuk mengelakkan kod lapuk.
- Fokus pada keselamatan menjadikannya proses anjakan ke kiri.
- Reka bentuk sistem dengan daya tahan perubahan untuk mengendalikan senario yang berkembang.
Konteks
Hari ini adalah hari keselamatan komputer dan setiap pengaturcara perlu mengakui tanggungjawabnya.
Bayangkan aplikasi yang mengendalikan jualan yang bergantung pada kumpulan tindak balas daripada pemproses kad kredit untuk mengendalikan transaksi.
Setiap pemproses kad kredit menyediakan kod respons yang dipratentukan untuk pelbagai situasi, seperti baki tidak mencukupi atau kad tamat tempoh.
Isu ini bermula apabila pemproses menambah kod respons baharu untuk transaksi yang ditolak tetapi tidak memberitahu platform.
Aplikasi tidak mengenali kod baharu, lalai menganggapnya sebagai "tidak ditemui" dan membenarkan pembelian.
Pengguna menyedari kelemahan ini dan mengeksploitasinya untuk membuat pembelian tanpa kebenaran.
Pendapatan platform menjunam, membawa kepada muflis.
Kod Contoh
salah
String response = paymentProcessor.authorize(cardDetails); switch (response) { case "DECLINED_INSUFFICIENT_FUNDS": // Handle insufficient funds break; case "DECLINED_EXPIRED_CARD": // Handle expired card break; default: // Authorize purchase break; }
Betul
String response = paymentProcessor.authorize(cardDetails); switch (response) { case "APPROVED": // Authorize purchase break; case "DECLINED_INSUFFICIENT_FUNDS": // Handle insufficient funds break; case "DECLINED_EXPIRED_CARD": // Handle expired card break; case "DECLINED_NEW_REASON": // Handle new declined reason break; default: // Reject purchase (default case for unknown responses) break; }
Pengesanan
- [x] Manual
Anda boleh mengesan bau ini dengan menyemak logik pengendalian ralat.
Semak sama ada sistem log dan menafikan kes yang tidak diiktiraf.
Ujian automatik boleh membantu mengenal pasti sama ada input baharu atau tidak dijangka lalai kepada tindakan yang sah.
Alat analisis statik boleh membantu dengan membenderakan pengendalian ralat yang mungkin tidak lengkap.
Tag
- Keselamatan
Tahap
- [x] Pertengahan
Mengapa Bijection Penting
Adalah penting untuk mengekalkan surat-menyurat satu dengan satu antara perwakilan dalaman aplikasi anda bagi respons pemproses pembayaran dan kod sebenar yang dikembalikan oleh pemproses.
Apabila anda memecahkan Bijection , anda mencipta ketidakpadanan.
Aplikasi ini mentafsir kod yang tidak diketahui dengan salah, membawa kepada tingkah laku yang tidak dijangka, lubang keselamatan dan akibat perniagaan yang berpotensi membawa bencana.
Penjanaan AI
Alat AI boleh mencipta bau ini jika anda tidak menyatakan cara mengendalikan kes yang tidak diketahui.
Sebagai contoh, pengendalian ralat generik mungkin lalai kepada hasil yang jinak seperti "tidak dijumpai" atau "berjaya."
Pengesanan AI
Penjana AI boleh membetulkan bau ini apabila anda mengarahkan mereka untuk menganggap kes yang tidak diketahui sebagai tidak dibenarkan dan menekankan pembalakan dan menguji senario yang tidak dijangka.
Cuba Mereka!
Ingat: AI Assistants melakukan banyak kesilapan
Tanpa Arahan Yang Betul | Dengan Arahan Tertentu |
---|---|
Kesimpulan
Sentiasa mengendalikan kes yang tidak diketahui dengan berhati-hati.
Lalai seperti "tidak ditemui" boleh membawa kepada isu keselamatan yang teruk dan kerugian kewangan.
Jadikan pengelogan dan penolakan respons yang tidak diketahui sebagai sebahagian daripada amalan pembangunan anda.
Buat keputusan anjakan ke kiri yang berkaitan dengan keselamatan semasa pengaturcaraan.
perhubungan
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-viii-8mn3352
Penafian
Bau Kod adalah pendapat saya.
Kredit
Foto oleh Nathana Rebouças di Unsplash
https://www.youtube.com/watch?v=J2QOejhA6ek
Andaian adalah ibu kepada semua kegagalan.
Kata Ouissal
Petikan Hebat Kejuruteraan Perisian
Artikel ini adalah sebahagian daripada Siri CodeSmell.