2015-12-16 221 views
1

必須有一種方法可以在hibernate中準備我們的SQL查詢嗎?org.hibernate.session準備好的語句

所以我們不代碼容易受到SQL注入這樣結束了......

public List<Book> findByAutor(String author) { 
    String qry = "from Book where author=\'"+author+"\'"; 
    @SuppressWarnings("unchecked") 
    List<Book> books = (List<Book>) getCurrentSession().createQuery(qry).list(); 
    return books; 
} 

由於用戶可以輸入類似:

"Paulo Coelho\' or ''='" 

作者和得到所有書籍在我們的數據庫...

大概是簡單的東西,但我只是找不到它在interwebs上:/

+0

您有什麼問題? – Abdelhak

+0

編輯,請再次閱讀我爲你添加了一個解釋 –

+2

[預防Hibernate中的SQL注入]可能的重複(http://stackoverflow.com/questions/4606505/prevention-against-sql-injection-in-hibernate) – tarleb

回答

1

嘗試使用這樣的事情,你可以set字符串,並check它:

String qry = "from Book where author= ?"; 
    @SuppressWarnings("unchecked") 
    List<Book> books = (List<Book>) getCurrentSession().createQuery(qry) 
    .setString(0, author) 
    .list(); 

欲瞭解更多信息看一看這個link