1. 程式人生 > 其它 >SQL注入及防止SQL注入

SQL注入及防止SQL注入


•SQL注入

SQL注入是通過操作輸入來修改事先定義好的SQL語句,對使用者輸入的字串進行過濾,轉義,限制或處理不嚴謹,導致使用者可以通過輸入精心構造的字串去非法獲取到資料庫中的資料,以達到執行程式碼對伺服器進行攻擊的方法。

 現有一個數據庫test中的表user,可以通過賬號name,密碼pass登入,檢視id

 登入程式碼

package JDBCtest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner; /* * 使用者登入 */ public class Demo4 { public static void main(String[] args) throws Exception { // 1.載入驅動 Class.forName("com.mysql.jdbc.Driver"); // 2.建立連線 String url = "jdbc:mysql:///test"; String username = "root"; String password
= "1234"; Connection connection = DriverManager.getConnection(url, username, password); // 接收使用者名稱密碼 Scanner sc = new Scanner(System.in); String name = sc.next(); String pass = sc.next();// 3.sql語句 String sql = "Select * from user where name='" + name + "' and pass ='" + pass + "'"; // System.out.println(sql);
// 4.獲取sql物件statement Statement statement = connection.createStatement(); // 5.執行sql語句 ResultSet rs = statement.executeQuery(sql); // 6.登入 if (rs.next()) { System.out.println("登入成功"); } else { System.out.println("登入失敗"); } // 7.釋放資源 statement.close(); connection.close(); } }

通過表中賬號密碼登入成功

 

 由於賬號或密碼錯誤登入失敗

 

 

 

 以上可以正確登入成功或失敗

注意!

如果此時我這樣輸入,也成功登入了,但是資料庫沒根本沒有這條資料

 

 

 這是為什麼呢?讓我們從程式碼裡找問題!