Rumah  >  Soal Jawab  >  teks badan

Mencegah serangan suntikan SQL dalam program Java

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粉328911308P粉328911308365 hari yang lalu787

membalas semua(2)saya akan balas

  • P粉194919082

    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).

    balas
    0
  • P粉030479054

    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.

    balas
    0
  • Batalbalas