SQL注入漏洞過(guò)程實(shí)例及解決方案
更新時(shí)間:2020年03月20日 15:12:43 作者:shouyaya
這篇文章主要介紹了SQL注入漏洞過(guò)程實(shí)例及解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
代碼示例:
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注入漏洞的關(guān)鍵,因?yàn)槭亲址钠唇樱瑫?huì)使查詢語(yǔ)句變?yōu)椋篠ELECT * FROM user WHERE username='aaa' OR '' AND password='1651561',此查詢語(yǔ)句是可得到結(jié)果集的,便出現(xiàn)此漏洞 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=?"; //使用?代替參數(shù),預(yù)先設(shè)置好sql格式,就算在輸入sql關(guān)鍵字也不會(huì)被sql識(shí)別 pstat=conn.prepareStatement(sql); pstat.setString(1,username); //設(shè)置問(wèn)號(hào)的值 pstat.setString(2,password); rs=pstat.executeQuery(); if(rs.next()){ flag=true; }else{ flag=false; } } catch (SQLException e) { e.printStackTrace(); } return flag; } }
使用以上解決辦法就無(wú)法通過(guò)SQL注入漏洞登陸用戶成功。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Mysql服務(wù)添加 iptables防火墻策略的方案
這篇文章主要介紹了給Mysql服務(wù)添加 iptables防火墻策略的方案,本文給大家分享兩種解決方案,需要的朋友可以參考下2021-04-04mysql的計(jì)劃任務(wù)與事件調(diào)度實(shí)例分析
這篇文章主要介紹了mysql的計(jì)劃任務(wù)與事件調(diào)度,結(jié)合實(shí)例形式分析了mysql計(jì)劃任務(wù)與事件調(diào)度相關(guān)概念、原理、用法與操作注意事項(xiàng),需要的朋友可以參考下2019-12-12MySQL清理數(shù)據(jù)并釋放磁盤(pán)空間的實(shí)現(xiàn)示例
本文主要介紹了MySQL如何清理數(shù)據(jù)并釋放磁盤(pán)空間,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07MySQL自動(dòng)填充create_time和update_time的兩種方式
當(dāng)我們創(chuàng)建業(yè)務(wù)表的時(shí)候 通常都需要設(shè)置create_time 和 update_time,下面這篇文章主要給大家介紹了關(guān)于MySQL自動(dòng)填充createTime和updateTime的兩種方式,需要的朋友可以參考下2022-05-05