Rumah > pangkalan data > tutorial mysql > Bagaimanakah Penyata yang Disediakan Menghalang Suntikan SQL?

Bagaimanakah Penyata yang Disediakan Menghalang Suntikan SQL?

Susan Sarandon
Lepaskan: 2025-01-20 22:57:08
asal
340 orang telah melayarinya

How Do Prepared Statements Prevent SQL Injection?

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>
Salin selepas log masuk

Penyata Disediakan Selamat:

<code class="language-java">PreparedStatement stmt = conn.prepareStatement("INSERT INTO student VALUES(?)");
stmt.setString(1, user);
stmt.execute();</code>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan