AdSense

網頁

2025/2/13

Java JDBC PreparedStatement 如何避免SQL Injection攻擊

我們都知道在Java程式使用SQL語法帶參數查詢資料庫時,應該用參數化查詢(Parameterized query),即PreparedStatement及佔位符(placeholder)?來傳入參數來避免SQL Injection(SQL隱碼攻擊)漏洞。


PreparedStatement查詢

PreparedStatement ps = conn.prepareStatement("select * from EMPLOYEE where id = ?");
ps.setString(1, "A0001");

ResultSet rs = ps.executeQuery();

因為PreparedStatement在執行SQL查詢前,會先將傳入參數中具有SQL特殊功能的符號或關鍵字給跳脫掉,像是||&ANDOR等,也就是說這些含特殊字的參數不會成為SQL語法的一部分,如此就可以避免惡意人士藉由傳入能改變SQL語意(即SQL Injection)來取得敏感資料或更改資料庫的狀態等。


沒有留言:

AdSense