java中的安全动态sql-query更改为.createNativeQuery

时间:2018-01-16 16:55:28

标签: java sql spring hibernate

我有一个使用EntityManager.createNativeQuery的应用程序。我们的质量门(声纳)对此并不高兴,并且由于SQL注入的风险而向我显示严重错误。有没有安全的"在java中创建动态sql-query的方法?

我目前的代码如下:

return entityManager.createNativeQuery(stringBuilder.toString(), MyClass.class).getResultList();

2 个答案:

答案 0 :(得分:1)

首先,即使您清理查询字符串的输入,Sonar也会抱怨。您可能必须// NOSONAR那一行。

Sonar无法判断您是否已扫描查询字符串的所有外部提供的输入。例如,“Joe'Bloggs”的名称输入将破坏您的查询字符串。我看不出你是如何构建查询的;您可以通过验证任何外部提供的值来确保其安全。

答案 1 :(得分:1)

为防止SQL注入,您可以使用参数绑定。

示例:

Query query = entityManager.createNativeQuery(
    "SELECT title, author FROM books WHERE genre = ?1");
query.setParameter(1, "mystery");

您可以找到更多示例here