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);
}
}
有部份人認為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);
}
}
留言
張貼留言