Saya melihat kode dari pengembang menggunakan konversi tanggal implisit. Saya ingin jawaban yang pasti mengapa mereka tidak melakukan ini.
SELECT * from dba_objects WHERE Created >= '06-MAR-2012';
oracle
sql-injection
Leigh Riffel
sumber
sumber
Jawaban:
Karena
'2012/12/1'
di AS 11 bulan setelah tanggal string yang sama di Eropa.Mengizinkan konversi tersirat berarti Anda berada di bawah kendali pengaturan lokasi.
Jika Anda dapat menyebutkan nama bisnis di mana 11 bulan merupakan margin kesalahan yang dapat diterima, saya akan terkesan.
sumber
Ada masalah yang akan terjadi jika sesi dengan format tanggal berbeda menjalankan kode.
Kegagalan Pernyataan
Data Buruk
Dalam situasi ini karena setiap pernyataan alter / insert dapat dilakukan oleh pengguna yang berbeda. Mereka semua akan menjalankan pernyataan yang sama, tetapi tanggal yang dihasilkan akan sangat berbeda. Pernyataan yang dimasukkan bisa dimakamkan dalam sebuah paket yang hanya secara tidak langsung dipanggil. Karena tidak ada kesalahan yang dikembalikan masalah mungkin tidak ditemukan sampai nanti.
Injeksi SQL
Dalam situasi ini seseorang yang jahat dapat mengubah format tanggal sesi di sana sedemikian rupa untuk memberi mereka akses ke data yang biasanya tidak dapat mereka akses.
sumber