PreparedStatement 防數據庫注入漏洞攻擊

以前看過一些C#關於數據庫的操作,記得其中用@來防止數據庫注入漏洞攻擊,現在由於實習需要,轉向Java,學習Jdbc,正好在做數據庫這一塊,聯想到Jdbc要怎麼防止數據庫注入漏洞攻擊呢,於是百度Jdbc防止注入漏洞攻擊,找到PreparedStatement類,在這裏記一下,以便以後複習,也給入門級需要的朋友做一下參考,如有不對之處,還請指正。

首先看一下什麼是sql注入漏洞,見下面的sql語句:


String sql = "select name,password from User where  name= '"+ userName + "'+ and 
password= '"+password+"'";


相信很多人都喜歡這樣拼sql語句,但如果我們知道 某一個usrName,但不知道密碼,於是我們傳password的時候,

傳入 or '1'='1, 結果也會登陸成功,這就是拼sql的壞處,於是就有了C#中的@,以及jdbc中的PreparedStatement

(注意與Statement的區別,Statement是PreparedStatement的父類,但其無法防止sql注入漏洞)
有了PreparedStatement,於是我們可以這麼寫

ResultSet rs=null;
PreparedStatement stat = null;
Connection conn = null;
try{
Class.forName(".......");//加載數據庫驅動
conn = DriverManager.getConnection(".....",".....", ".....");//獲取數據庫連接
String sql = "select name,password from User where  name = ? and password = ? ";
  pStat = conn.prepareStatement(sql);
pStat.setString(1,name);//name是要傳的用戶名
  pStat.setString(2,password);//password是要傳的密碼
rs=pStat.executeQuery(sql);
}
catch(Exception e){
e.printStackTrace();
}


利用PreparedStatement我們就可以有效的避免sql注入漏洞攻擊了。



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