以前看過一些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
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注入漏洞攻擊了。