Rumah > Java > javaTutorial > Bolehkah Penyata Disediakan dalam Java Mengendalikan Nama Lajur Pembolehubah dengan Selamat dalam MySQL?

Bolehkah Penyata Disediakan dalam Java Mengendalikan Nama Lajur Pembolehubah dengan Selamat dalam MySQL?

Susan Sarandon
Lepaskan: 2024-12-06 20:09:12
asal
265 orang telah melayarinya

Can Prepared Statements in Java Handle Variable Column Names Securely in MySQL?

Nama Lajur Pembolehubah Menggunakan Penyata Disediakan

Isu:

Bolehkah nama lajur berubah ditentukan apabila menggunakan pernyataan yang disediakan dalam MySQL menggunakan Java untuk menghalang suntikan SQL kelemahan?

Penjelasan:

Pernyataan yang disediakan direka bentuk untuk melindungi daripada suntikan SQL dengan mengasingkan parameter pertanyaan daripada pernyataan pertanyaan utama. Apabila cuba menggunakan pernyataan yang disediakan, nama lajur tidak dikenali sebagai parameter dan sebaliknya diinterpolasi ke dalam pertanyaan sebagai nilai literal. Ini boleh membawa kepada isu keselamatan jika nama lajur yang disediakan tidak dibersihkan dengan betul.

Penyelesaian:

  • Elakkan Nama Lajur Dinamik: Adalah disyorkan untuk mereka bentuk semula skema pangkalan data untuk menghapuskan keperluan untuk nama lajur yang ditentukan pengguna. Sebaliknya, pertimbangkan untuk membuat lajur yang berasingan untuk menyimpan nama lajur yang diingini dan memasukkannya dalam pertanyaan.
  • Pembinaan dan Pembersihan Pertanyaan Manual: Jika nama lajur dinamik tidak dapat dielakkan, anda perlu bina sendiri rentetan pertanyaan SQL. Gunakan kaedah String#replace() untuk melepaskan sebarang petikan tertanam dalam nama lajur untuk menghalang suntikan SQL. Contohnya:
// Sanitize the user-provided column names
String sanitizedColumns = columnNames.replace("'", "\'");

// Build the SQL query string
String query = "SELECT a,b,c,ROW_NUMBER() OVER(), " + sanitizedColumns + " FROM " + name + " WHERE d=?";

// Prepare the statement
stmt = conn.prepareStatement(query);
stmt.setString(1, "x");
Salin selepas log masuk

Atas ialah kandungan terperinci Bolehkah Penyata Disediakan dalam Java Mengendalikan Nama Lajur Pembolehubah dengan Selamat dalam MySQL?. 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