1. 程式人生 > >SQL註入攻擊及其解決方法

SQL註入攻擊及其解決方法

優勢 相同 res 對象 數據庫服務器 指定 from eight 處理

SQL註入攻擊:

  當程序中出現了SQL拼接時,當輸入的值為jack‘#或者‘jack‘ or ‘1=1時,會讓SQL語義發生改變,因為SQL語句中出現了SQL的關鍵字(# or 1=1),造成數據泄露,系統安全隱患。

SQL語義發生改變的語句例如:

select * from user where username=‘jack‘#‘ and password=‘‘

select * from user where username=‘jack‘ or ‘1=1‘ and password=‘‘

解決SQL攻擊:

  利用PreparedStatement對象;

//3,獲取帶有預編譯的傳輸器
//SQL中包含著?的,叫做SQL骨架。 //? 叫做占位符 String sql = "select * from user where username=? and password=?"; ps = conn.prepareStatement(sql); //設置參數setString //第一個參數必須和問號的順序一致, //第二個參數指定問號的值 ps.setString(1, name); ps.setString(2, pwd); //4,執行SQL rs = ps.executeQuery();

PreparedStatement優勢:

1,防止SQL註入
先把SQL骨架(帶有?的一條SQL,?叫做 占位符)發送給數據庫服務器,然後再把參數發給服務器。
本質上是由於新對象把sql關鍵字給屏蔽了,把SQL關鍵字當做一個普通的文本處理。

2,省略了參數拼接的麻煩,通過?作為占位符,通過setString方法來綁定問號的位置,並且賦值來完成的。 3,提高執行效率 先把SQL骨架緩存起來,當下次要訪問相同SQL骨架的業務時,先去緩存中找SQL,緩存中沒有的話,再發出SQL語句查詢數據庫。

SQL註入攻擊及其解決方法