我必須在我的 java 程式中新增一條語句來更新資料庫表:
String insert = "INSERT INTO customer(name,address,email) VALUES('" + name + "','" + addre + "','" + email + "');";
我聽說這可以透過 SQL 注入來利用,例如:
DROP TABLE customer;
我的程式有一個 Java GUI,所有名稱、地址和電子郵件值均從 Jtextfields
檢索。我想知道黑如何將以下程式碼(DROP TABLE customer;
)加入我的插入語句中以及如何防止這種情況。
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);
也要解析此類變數的值,並確保它們不包含任何不允許的字元(例如名稱中的“;”)。
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();
這將防止注入攻擊。
駭客將其放入其中的方式是,如果您插入的字串來自某處的輸入 - 例如網頁上的輸入字段,或者應用程式或類似應用程式中表單上的輸入字段。