共計 1641 個字符,預計需要花費 5 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這篇文章將為大家詳細講解有關 SQL 注入漏洞過程的示例分析,丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
代碼示例:
public class JDBCDemo3 { public static void demo3_1(){
boolean flag=login( aaa OR , 1651561 // 若已知用戶名,用這種方式便可不用知道密碼就可登陸成功
if (flag){
System.out.println( 登陸成功
}else{
System.out.println( 登陸失敗
}
}
public static boolean login(String username,String password){
Connection conn=null;
Statement stat=null;
ResultSet rs=null;
boolean flag=false;
try { conn=JDBCUtils.getConnection();
String sql= SELECT * FROM user WHERE username= +username+ AND password= +password+ // 此處是 SQL 注入漏洞的關鍵,因為是字符串的拼接,會使查詢語句變為:SELECT * FROM user WHERE username= aaa OR AND password= 1651561 , 此查詢語句是可得到結果集的,便出現此漏洞
stat=conn.createStatement();
rs=stat.executeQuery(sql);
if(rs.next()){
flag=true;
}else{
flag=false;
}
} catch (SQLException e) { e.printStackTrace();
}
return flag;
}
解決方法,使用 PrepareStatment:
public static void demo3_1(){
boolean flag=login1( aaa OR , 1651561
if (flag){
System.out.println( 登陸成功
}else{
System.out.println( 登陸失敗
}
}
public static boolean login1(String username,String password){
Connection conn=null;
PreparedStatement pstat=null;
ResultSet rs=null;
boolean flag=false;
try { conn=JDBCUtils.getConnection();
String sql= SELECT * FROM user WHERE username=? AND password=? // 使用? 代替參數,預先設置好 sql 格式,就算在輸入 sql 關鍵字也不會被 sql 識別
pstat=conn.prepareStatement(sql);
pstat.setString(1,username); // 設置問號的值
pstat.setString(2,password);
rs=pstat.executeQuery();
if(rs.next()){
flag=true;
}else{
flag=false;
}
} catch (SQLException e) { e.printStackTrace();
}
return flag;
}
}
使用以上解決辦法就無法通過 SQL 注入漏洞登陸用戶成功。
關于“SQL 注入漏洞過程的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
向 AI 問一下細節
正文完