Pernyataan Disediakan: Pertahanan Teguh Terhadap Suntikan SQL (Bahagian 2)
Pernyataan yang disediakan menawarkan pendekatan proaktif untuk pencegahan suntikan SQL. Mereka mencapai ini dengan memisahkan data yang dibekalkan pengguna daripada struktur pertanyaan SQL. Daripada membenamkan input pengguna terus ke dalam rentetan pertanyaan, pernyataan yang disediakan menggunakan parameter, biasanya diwakili sebagai tanda soal (?), sebagai ruang letak.
Enjin pangkalan data menghuraikan dan menyusun pernyataan yang disediakan sebelum data pengguna ditambahkan. Langkah penting ini memastikan bahawa input pengguna dianggap sebagai data semata-mata, menghalang tafsirannya sebagai kod SQL boleh laku. Ini berbeza dengan ketara dengan kaedah yang mudah terjejas untuk menggabungkan input pengguna secara langsung ke dalam rentetan SQL.
Contoh Ilustrasi: Pertimbangkan untuk memasukkan data pengguna ke dalam pangkalan data.
Penggabungan Rentetan Rentan:
<code class="language-java">PreparedStatement stmt = conn.createStatement("INSERT INTO students VALUES('" + user + "')"); stmt.execute();</code>
Penyata Disediakan Selamat:
<code class="language-java">PreparedStatement stmt = conn.prepareStatement("INSERT INTO student VALUES(?)"); stmt.setString(1, user); stmt.execute();</code>
Jika pengguna berniat jahat memasukkan: Robert'); DROP TABLE students; --
Kaedah penggabungan rentetan menghasilkan:
<code class="language-sql">INSERT INTO students VALUES('Robert'); DROP TABLE students; --')</code>
Ini melaksanakan perintah DROP TABLE
berniat jahat.
Walau bagaimanapun, dengan pernyataan yang disediakan, pangkalan data melaksanakan:
<code class="language-sql">INSERT INTO student VALUES('Robert');</code>
Input berniat jahat dianggap sebagai data literal, meneutralkan ancaman suntikan SQL. Penyataan yang disediakan secara berkesan mengasingkan logik pertanyaan daripada input pengguna yang berpotensi berbahaya, sekali gus menjamin integriti arahan SQL.
Atas ialah kandungan terperinci Bagaimanakah Penyata yang Disediakan Menghalang Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!