2016-12-06 47 views
0

我有一個使用Hibernate的Java Web服務。它的一種方法是用來在SQL Server中創建一個新表,並且該表未映射到一個對象。當前的設計接受數據庫名稱,模式名稱,表名稱和字段定義作爲參數,並執行從它們創建一個查詢字符串,然後執行它。它工作正常,但它是一個SQL注入缺陷。如何在不引入SQL注入漏洞的情況下在Hibernate Java Web服務中創建新表?

有沒有辦法創建一個表,而不會引入此缺陷,例如使用參數化查詢,或者使用Hibernate中的某些功能我不知道?

該漏洞發生在調用createSQLQuery:

String sSql = "CREATE TABLE [" + sDatabaseName + "].[" + sSchema + "].[" + sTableName + "] (" + sSqlFields + ")"; 
Session session = getSession(); 
Query q = session.createSQLQuery(sSql); 
q.executeUpdate(); 

回答

0

這是可能的。您可以參數化查詢,如:

String sSql = "CREATE TABLE [ ? ].[ ? ].[ ? ] (?)"; 
Query q = session.createQuery(sSql); 
q.setString(0, sDatabaseName) 
.setString(1, sSchema) 
.setString(2, sTableName) 
.setString(3, sSqlFields) 
.executeUpdate(); 
+0

謝謝,邁克爾。我想這正是我所期待的。 – Dragon

+0

沒問題。僅供參考,如果他們幫助你,你可以升職或接受答案。 – Michael

+0

我還沒有得分的積分,但我確實接受了答案。再次感謝。 – Dragon

相關問題