07_傳智播客JDBC_Statement的sql注入問題

通過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 保留字

但是 不同的數據庫 的某些保留字 是不一樣的

例如 單引號 雙引號

所以 應該交給數據庫生產廠商(驅動)來過濾保留字

 

發佈了48 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章