阿摩線上測驗 登入

申論題資訊

試卷:113年 - 113 司法特種考試_三等_檢察事務官電子資訊組:程式語言#122108
科目:程式語言
年份:113年
排序:0

申論題內容

(三)請舉出至少兩種常見預防「SQL injection 攻擊」的方法並簡要說明。

詳解 (共 1 筆)

詳解 提供者:hchungw

以下是兩種常見的預防「SQL Injection 攻擊」的方法:

  1. 參數化查詢(Parameterized Queries): 使用參數化查詢確保用戶輸入不會直接拼接到 SQL 語句中,而是作為參數處理,這樣可以避免惡意輸入被解釋為 SQL 語句的一部分。在大多數現代編程語言中,使用資料庫連接庫(如 Python 中的 sqlite3 或 Java 中的 PreparedStatement)可以實現參數化查詢,從而有效防止 SQL injection 攻擊。

    例如,在 Python 中,參數化查詢如下:

    python
     
    cursor.execute("SELECT * FROM db_user WHERE username=? AND password=?", (username, password))

    這樣的語句會自動將 username 和 password 視為參數,而不是直接拼接在 SQL 語句中。

  2. 使用預備語句(Prepared Statements): 預備語句是另一種防止 SQL Injection 的方法,它類似於參數化查詢。預備語句可以在執行之前對 SQL 語句進行編譯,將用戶輸入與 SQL 語句本身分開處理,防止惡意代碼被當作 SQL 語句的一部分來執行。這在 Java 中非常常見,特別是使用 JDBC 時。

    Java 中使用預備語句的示例:

    java
     
    String sql = "SELECT * FROM db_user WHERE username = ? AND password = ?"; PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, username); stmt.setString(2, password); ResultSet rs = stmt.executeQuery();

    這樣做可以防止 SQL Injection,因為所有的用戶輸入都作為參數被安全處理。

此外,其他補充的防範措施還包括輸入驗證(檢查輸入格式的合法性)、最小化數據庫權限(限制應用程式訪問數據庫的權限),以及使用網頁應用防火牆(WAF) 來檢測和防範 SQL Injection 攻擊。