java - 在命名查询的 setParameter 中附加值是否会增加 SQL 注入(inject)的可能性?

标签 java sql sonarqube sql-injection

我有一个查询字符串,例如 -

queryStr.append(" ").append(relation.getJoins()[i].getChildSql()).append(" = :join").append(i);

我正在使用 setParameter 设置 :join 的值,但 Sonar 提示 SQL 注入(inject)的可能性。是否不允许在 setParameter 中附加值,如下所示 -

 for (int i = 0; i < parentKeyValues.length; i++) {
                    query.setParameter("join" + i, parentKeyValues[i]);
                }

最佳答案

SQL 注入(inject)可能发生在:

.append(relation.getJoins()[i].getChildSql())

仅当 getChildSql() 可以返回任何类型的用户提供的数据时。

.append(" = :join").append(i)

仅当 i 不是整数并且可能包含用户提供的数据时。

我认为 setParameter() 不会被利用。

关于java - 在命名查询的 setParameter 中附加值是否会增加 SQL 注入(inject)的可能性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51036478/

相关文章:

c# - SonarQube 将它与 Unity 3D 一起使用时会遇到很多问题

java - JSF 2.0 数据表中同一列中的不同组件

java - 打印格式化数组

php - 在 mysql 语句中使用 if 语句

active-directory - 哪些 SonarQube 插件支持 SSO?

java - mvn Sonar :sonar running Error: cannot be cast to org. sonar.java.resolve.JavaSymbol$TypeJavaSymbol

java - 使用双引号在 postgresql 中创建表

java - jooq 3.11.9 与 MySQL 版本 8.0.11

mysql - 是否可以在 MySQL 中创建一个表达式作为默认值的列?

php - 用户/密码身份验证 PHP/MySQL - PHP 或 MySQL 查询中的比较?