1. 程式人生 > 其它 >防止sql注入問題 (模擬登陸)

防止sql注入問題 (模擬登陸)

package com.itheima.jdbc;

import sun.font.DelegatingShape;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
* 解決mysql注入問題
*/
public class JDBCdeom2 {
public static void main(String[] args) throws Exception{
Statement stmt = null;
Connection conn = null;


// 1.註冊驅動,會丟擲ClassNotFoundException異常(MySQL5.0後可省略)
Class.forName("com.mysql.jdbc.Driver");
// 2.獲取Connection物件,會丟擲SQLException異常(因為連線的是本機的資料庫所以ip地址和埠號可以省略不寫)
conn= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db1","root","1234");
// 登入的使用者名稱和密碼
String name="zhangsan";
String passwd="' or '1'='1";
// 3.定義SQL
String sql="select * from user1 where name=? and passwd=?";
// 4.獲取執行SQL的物件Staement

PreparedStatement pstmt= conn.prepareStatement(sql);
// stmt = conn.createStatement();
// 5.執行SQL(返回一個結果)
//設定?的值
pstmt.setString(1,name);
pstmt.setString(2,passwd);
//執行sql 返回一個結果集
ResultSet re= pstmt.executeQuery();

//建立集合
List<User> list=new ArrayList<User>();
//遍歷資料
if(re.next()){
System.out.println("登入成功");
}
else System.out.println("登入失敗");

while(re.next()){
int id=re.getInt("id");
String name1= re.getString("name");
int money= re.getInt("money");
User u=new User();
u.setId(id);
u.setName(name1);
u.setMoney(money);
list.add(u);
}

//遍歷集合
for ( User i: list) {
System.out.println(i.getId()+i.getName()+i.getMoney());
System.out.println("-------");
}
// 7.釋放資源(如果第5步執行報錯就不會執行下面的語句,下面的程式碼就不會正常執行)
pstmt.close();
conn.close();

//
}
}






這是設定了防注入的 當密碼正確時 我可以登陸,當密碼錯誤時 不可以登陸

 

 

 

 

 

 

 

下面是沒設定防注入的

 

 

 

 

可以看見將密碼通過字串拼接是可以進去系統的

 下面是資料庫資料