首頁  >  問答  >  主體

防止Java程式中的SQL注入攻擊

我必須在我的 java 程式中新增一條語句來更新資料庫表:

String insert =
    "INSERT INTO customer(name,address,email) VALUES('" + name + "','" + addre + "','" + email + "');";

我聽說這可以透過 SQL 注入來利用,例如:

DROP TABLE customer;

我的程式有一個 Java GUI,所有名稱、地址和電子郵件值均從 Jtextfields 檢索。我想知道黑如何將以下程式碼(DROP TABLE customer;)加入我的插入語句中以及如何防止這種情況。

P粉328911308P粉328911308365 天前789

全部回覆(2)我來回復

  • P粉194919082

    P粉1949190822023-10-21 12:11:28

    例如:

    name = "'); DROP TABLE customer; --"

    會將此值插入到插入中:

    INSERT INTO customer(name,address,email)     VALUES(''); DROP TABLE customer; --"','"+addre+"','"+email+"');

    使用準備好的語句和 SQL 參數(來自 Matt Fellows 的「竊取」範例):

    String insert = "INSERT INTO customer(name,address,email) VALUES(?, ?, ?);";
    PreparedStament ps = connection.prepareStatment(insert);

    也要解析此類變數的值,並確保它們不包含任何不允許的字元(例如名稱中的“;”)。

    回覆
    0
  • P粉030479054

    P粉0304790542023-10-21 09:25:32

    您需要使用PreparedStatement。 例如

    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();

    這將防止注入攻擊。

    駭客將其放入其中的方式是,如果您插入的字串來自某處的輸入 - 例如網頁上的輸入字段,或者應用程式或類似應用程式中表單上的輸入字段。

    回覆
    0
  • 取消回覆