通過PreperedStatement預防主注入
PreperedStatement的優點
1 預防sql注入 佔位符作爲實參來定義sql語句,從而避免sql注入的攻擊。
2 Statement 頻繁使數據庫編譯SQL ,造成數據庫緩存區溢出
3 在相關數據庫連接沒有關閉的情況下, 數據庫和驅動可以優化PreperedStatement
package five.base;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import four.utils.utilsSingle;
public class Base {
public static void main(String[] args) throws SQLException {
// 注入
read("'or 1 or '");
}
static void read(String name) throws SQLException{
Statement statement = null;
ResultSet rs = null;
utilsSingle instance = utilsSingle.getUtilsSingleInstance();
// 1 創建連接
Connection connection = instance.getConnection();
try {
// 2 創建語句
statement = connection.createStatement();
// 4 執行語句
String sql = "select *from user where name = '" + name + "'";
System.out.println(sql);
rs = statement.executeQuery(sql);
// 5 處理結果
while (rs.next()) {
System.out.println(rs.getObject(1)
+ "/t" + rs.getObject(2)
+ "/t" + rs.getObject(3)
+ "/t" + rs.getObject(4)
+ "/t");
}
} finally {
// 釋放資源 finally
instance.free(connection, statement, rs);
}
}
}
解決思路 過濾 sql 保留字
但是 不同的數據庫 的某些保留字 是不一樣的
例如 單引號 雙引號
所以 應該交給數據庫生產廠商(驅動)來過濾保留字