Setiap orang akrab dengan injeksi SQL. Ini adalah metode serangan umum. Penyerang memasukkan beberapa fragmen SQL aneh pada informasi formulir atau URL antarmuka, seperti pernyataan "atau '1' = '1'", yang dapat menyerang aplikasi dengan verifikasi parameter yang tidak memadai. Jadi kita perlu melakukan beberapa pekerjaan dalam aplikasi kita untuk mencegah metode serangan semacam itu. Dalam beberapa aplikasi dengan keamanan tinggi, seperti perangkat lunak perbankan, kami sering menggunakan metode mengganti semua pernyataan SQL dengan prosedur tersimpan untuk mencegah injeksi SQL. Ini tentu saja cara yang sangat aman, tetapi kita mungkin tidak memerlukan metode kaku ini dalam pengembangan harian kita.
Sebagai kerangka kerja lapisan kegigihan semi-otomatis, kerangka kerja Mybatis harus ditulis secara manual oleh diri kita sendiri. Pada saat ini, tentu saja, perlu untuk mencegah injeksi SQL. Faktanya, SQL mybatis adalah struktur dengan fungsi "input + output", mirip dengan fungsi, sebagai berikut:
<pilih id = "getBlogById" resultType = "blog" parameterType = "int"> <br> Pilih id, judul, penulis, konten dari blog di mana id =#{id} </pilih> Di sini, ParameTerType menunjukkan tipe parameter input, dan hasil hasil menunjukkan tipe parameter output. Menanggapi hal di atas, jika kita ingin mencegah injeksi SQL, kita secara alami harus bekerja keras untuk memasukkan parameter. Bagian yang disorot dalam kode di atas adalah bagian di mana parameter input disambung dalam SQL. Setelah melewati parameter, cetak pernyataan SQL yang dieksekusi dan Anda akan melihat bahwa SQL terlihat seperti ini:
Pilih ID, Judul, Penulis, Konten dari Blog Where ID =?
Tidak peduli apa parameter yang dimasukkan, SQL yang dicetak seperti ini. Ini karena mybatis memungkinkan fungsi prekompilasi. Sebelum SQL dieksekusi, SQL di atas akan dikirim ke database untuk kompilasi. Selama eksekusi, Anda dapat menggunakan SQL yang dikompilasi secara langsung dan mengganti placeholder "?". Karena injeksi SQL hanya dapat bekerja pada proses kompilasi, metode ini dapat menghindari masalah injeksi SQL.
Bagaimana MyBatis mencapai pra-kompilasi SQL? Bahkan, di bagian bawah kerangka kerja, kelas persiapan disiapkan di JDBC sedang bekerja. Persiapan adalah subclass dari pernyataan yang sangat kami kenal. Objeknya berisi pernyataan SQL yang dikompilasi. Pendekatan "siap" ini tidak hanya meningkatkan keamanan, tetapi juga meningkatkan efisiensi saat menjalankan satu SQL beberapa kali, karena SQL telah dikompilasi dan tidak perlu dikompilasi saat mengeksekusi lagi.
Karena itu, dapatkah kita mencegah injeksi SQL dengan menggunakan mybatis? Tentu saja tidak, silakan lihat kode berikut:
<Pilih id = "orderblog" resultType = "blog" parameterType = "peta"> pilih id, judul, penulis, konten dari pesanan blog oleh $ {ordaram} </pilih> Setelah pengamatan yang cermat, format parameter inline telah berubah dari "#{xxx}" menjadi $ {xxx}. Jika kami menetapkan parameter "OrderParam" untuk "ID" dan mencetak SQL, sepertinya ini:
Pilih ID, Judul, Penulis, Konten dari Blog Order by ID
Jelas, ini tidak dapat mencegah injeksi SQL. Di MyBatis, parameter dalam format "$ {xxx}" akan secara langsung berpartisipasi dalam kompilasi SQL, sehingga mencegah serangan injeksi. Namun, ketika datang ke nama tabel dinamis dan nama kolom, kami hanya dapat menggunakan format parameter seperti "$ {xxx}", jadi kami perlu memproses parameter tersebut secara manual dalam kode untuk mencegah injeksi.
Kesimpulan: Saat menulis pernyataan pemetaan mybatis, coba gunakan format "#{xxx}". Jika Anda harus menggunakan parameter seperti "$ {xxx}", Anda harus secara manual melakukan pekerjaan penyaringan yang baik untuk mencegah serangan injeksi SQL.
Di atas adalah konten lengkap dari kerangka kerja Java Persistence Mybatis mencegah injeksi SQL yang dibawa editor kepada Anda. Saya harap semua orang akan mendukung wulin.com lebih banyak ~