Hibernate 提供了預編譯查詢(PreparedStatement)來防止 SQL 注入。預編譯查詢將 SQL 語句的結構與參數分開,參數在編譯時就已經確定,而不是在執行時動態生成。這樣可以確保參數不會被解釋為 SQL 代碼的一部分,從而有效防止 SQL 注入攻擊。
要使用 Hibernate 防止 SQL 注入,請遵循以下步驟:
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
對于 HQL 查詢:
Query query = session.createQuery("FROM User WHERE username = :username");
對于原生 SQL 查詢:
Query query = session.createSQLQuery("SELECT * FROM users WHERE username = :username");
query.setParameter("username", "JohnDoe");
對于 HQL 查詢:
List<User> users = query.list();
對于原生 SQL 查詢:
List<Object[]> results = query.list();
session.close();
通過以上步驟,Hibernate 會自動處理參數綁定,防止 SQL 注入攻擊。請注意,雖然 Hibernate 提供了預編譯查詢來防止 SQL 注入,但仍然需要謹慎處理用戶輸入,確保數據的有效性和安全性。