Java 預防SQL injection

  SQL注入(英語:SQL injection),也稱SQL隱碼或SQL注碼,是發生於應用程式與資料庫層的安全漏洞。簡而言之,是在輸入的字串之中夾帶SQL指令,在設計不良的程式當中忽略了字元檢查,那麼這些夾帶進去的惡意指令就會被資料庫伺服器誤認為是正常的SQL指令而執行,因此遭到破壞或是入侵。

  有部份人認為SQL注入是只針對Microsoft SQL Server而來,但只要是支援批次處理SQL指令的資料庫伺服器,都有可能受到此種手法的攻擊。


  以下為使用PreparedStatement防止SQL injection範例:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;


public class OracleTest {
 
    public static boolean login (String Username) throws Exception {
String driverClassName = "oracle.jdbc.driver.OracleDriver" ;
String url = "jdbc:oracle:thin:@IP:SID" ;
String username = USER_ID;
String password = PASSWORD;

Class.forName(driverClassName) ;
Connection con = DriverManager.getConnection(url, username, password) ;

String sql = "select * from dba_users where USERNAME=?";
PreparedStatement psmt = con.prepareStatement(sql);

psmt.setString(1,Username);
ResultSet rs = psmt.executeQuery();
               
return rs.next() ;
    }     
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception{ 
        boolean bool =  login(Username) ;
        System.out.println(bool);
    }
}

留言

熱門文章