Rumah > Soal Jawab > teks badan
Saya perlu menambah kenyataan pada program java saya untuk mengemas kini jadual pangkalan data:
String insert = "INSERT INTO customer(name,address,email) VALUES('" + name + "','" + addre + "','" + email + "');";
Saya dengar ini boleh dieksploitasi melalui suntikan SQL, contohnya:
DROP TABLE customer;
Program saya mempunyai GUI Java dan semua nama, alamat dan nilai e-mel ditambah daripada Jtextfields
检索。我想知道黑如何将以下代码(DROP TABLE customer;
) pada penyata sisipan saya dan bagaimana saya boleh menghalang perkara ini.
P粉1949190822023-10-21 12:11:28
Contohnya:
name = "'); DROP TABLE customer; --"
akan memasukkan nilai ini ke dalam masukkan :
INSERT INTO customer(name,address,email) VALUES(''); DROP TABLE customer; --"','"+addre+"','"+email+"');
Gunakan pernyataan yang disediakan dan parameter SQL (contoh "mencuri" daripada Matt Fellows):
String insert = "INSERT INTO customer(name,address,email) VALUES(?, ?, ?);"; PreparedStament ps = connection.prepareStatment(insert);
Juga menghuraikan nilai pembolehubah tersebut dan pastikan ia tidak mengandungi sebarang aksara yang tidak dibenarkan (seperti ";" dalam nama).
P粉0304790542023-10-21 09:25:32
Anda perlu menggunakan PreparedStatement. Contohnya
String insert = "INSERT INTO customer(name,address,email) VALUES(?, ?, ?);"; PreparedStatement ps = connection.prepareStatement(insert); ps.setString(1, name); ps.setString(2, addre); ps.setString(3, email); ResultSet rs = ps.executeQuery();
Ini akan menghalang serangan suntikan.
Cara penggodam memasukkannya ialah jika rentetan yang anda masukkan datang daripada input di suatu tempat - seperti medan input pada halaman web atau medan input pada borang dalam apl atau yang serupa.