使用預備語句的變數列名
問題:
問題:可以指定變數名使用Java 在MySQL 中使用預先準備語句來防止SQL 注入漏洞?
說明:準備好的語句旨在透過將查詢參數與主查詢語句分離來防止 SQL 注入。當嘗試使用準備好的語句時,列名不會被辨識為參數,而是會作為文字值插入查詢。如果提供的列名稱未正確清理,這可能會導致安全性問題。
// Sanitize the user-provided column names String sanitizedColumns = columnNames.replace("'", "\'"); // Build the SQL query string String query = "SELECT a,b,c,ROW_NUMBER() OVER(), " + sanitizedColumns + " FROM " + name + " WHERE d=?"; // Prepare the statement stmt = conn.prepareStatement(query); stmt.setString(1, "x");手動查詢建置和清理:如果動態列名稱不可避免,您需要自行建立 SQL 查詢字串。使用 String#replace() 方法轉義列名中任何嵌入的引號,以防止 SQL 注入。例如:
以上是Java 中的準備語句可以在 MySQL 中安全地處理變數列名嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!