首頁 > Java > java教程 > Java 中的PreparedStatements 如何防止 SQL 注入?

Java 中的PreparedStatements 如何防止 SQL 注入?

Mary-Kate Olsen
發布: 2024-12-24 21:54:17
原創
858 人瀏覽過

How Can PreparedStatements Prevent SQL Injection in Java?

防止 SQL 注入:在 Java 中轉義字串

防止 SQL 注入的任務需要仔細處理輸入字串。一種方法是修改現有字串以防止特殊字元被利用。具體來說,將現有反斜線() 轉換為、引號(") 轉換為"、撇號(') 轉換為' 以及換行符(n) 轉換為n 可確保字串在MySQL 資料庫查詢評估時變得無害。

雖然replaceAll函數可以實現這種轉換,但由於大量的反斜杠,它的使用可能會變得複雜。為了解決這個問題,另一個更安全的方法是使用PreparedStatements。

PreparedStatements 透過將使用者輸入視為查詢語句中的參數來消除 SQL 注入的可能性。考慮以下 Java 程式碼範例:

public insertUser(String name, String email) {
   Connection conn = null;
   PreparedStatement stmt = null;
   try {
      conn = setupTheDatabaseConnectionSomehow();
      stmt = conn.prepareStatement("INSERT INTO person (name, email) values (?, ?)");
      stmt.setString(1, name);
      stmt.setString(2, email);
      stmt.executeUpdate();
   }
   finally {
      try {
         if (stmt != null) { stmt.close(); }
      }
      catch (Exception e) {
         // log this error
      }
      try {
         if (conn != null) { conn.close(); }
      }
      catch (Exception e) {
         // log this error
      }
   }
}
登入後複製

無論姓名和電子郵件中包含什麼字符,它們都會安全地插入資料庫,而不會對 INSERT 語句的完整性構成任何威脅。

PreparedStatement 類別提供了針對特定資料類型客製化的各種 set 方法,確保與資料庫欄位定義的相容性。例如,要設定 INTEGER 列,可以使用 setInt 方法。請參閱PreparedStatement 文件以取得可用方法的完整清單。

以上是Java 中的PreparedStatements 如何防止 SQL 注入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板