以下是兩種常見的預防「SQL Injection 攻擊」的方法:
參數化查詢(Parameterized Queries): 使用參數化查詢確保用戶輸入不會直接拼接到 SQL 語句中,而是作為參數處理,這樣可以避免惡意輸入被解釋為 SQL 語句的一部分。在大多數現代編程語言中,使用資料庫連接庫(如 Python 中的 sqlite3 或 Java 中的 PreparedStatement)可以實現參數化查詢,從而有效防止 SQL injection 攻擊。
例如,在 Python 中,參數化查詢如下:
這樣的語句會自動將 username 和 password 視為參數,而不是直接拼接在 SQL 語句中。
使用預備語句(Prepared Statements): 預備語句是另一種防止 SQL Injection 的方法,它類似於參數化查詢。預備語句可以在執行之前對 SQL 語句進行編譯,將用戶輸入與 SQL 語句本身分開處理,防止惡意代碼被當作 SQL 語句的一部分來執行。這在 Java 中非常常見,特別是使用 JDBC 時。
Java 中使用預備語句的示例:
這樣做可以防止 SQL Injection,因為所有的用戶輸入都作為參數被安全處理。
此外,其他補充的防範措施還包括輸入驗證(檢查輸入格式的合法性)、最小化數據庫權限(限制應用程式訪問數據庫的權限),以及使用網頁應用防火牆(WAF) 來檢測和防範 SQL Injection 攻擊。