Fortify high:用于调用私有构造函数的反射上的访问说明符操作

时间:2017-01-26 17:00:26

标签: java junit sonarqube fortify

我使用反射调用类的私有构造函数,以解决声纳扫描报告显示的分支覆盖问题不足。这是我工作的代码的片段:

// reflection to access a private constructor of a class
        Constructor<CMISBridgeMaps> c = CMISBridgeMaps.class.getDeclaredConstructor(new Class[0]);
        c.setAccessible(true);
        cmisBridgeMaps = c.newInstance(new Object[0]);

以上代码解决了我的声纳扫描关键问题。但遗憾的是,fortify现在在以下行中显示 Access说明符操作 问题:

c.setAccessible(true);

如何解决强化和sonarcube问题?任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

我相信您不需要在UNIT TC上运行强化扫描。在编写它们以验证您的代码时,它们不会遇到您的生产/实际环境。

答案 1 :(得分:1)

你可以使用Java的反射api来解决这个问题。以下是我用于同一问题的解决方案。

Field field = objectToBeUpdated.getClass().getDeclaredField("paramName");
AccessibleObject.setAccessible(new AccessibleObject[] {field}, true);

下面是上面使用的类的导入。

import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;

答案 2 :(得分:0)

如果您的应用程序遵循以下方法,则可以将此问题标记为False positive。

  1. 应用程序正在使用反射机制通过以下方式动态访问字段值: 读取数据库表中定义的配置。
  2. 在访问对象,方法或输入字段时,应用程序正在使用任何过滤器。
  3. 在执行不受信任的代码之前,必须应用适当的过滤过程。

答案 3 :(得分:-2)

如果您使用Spring,则可以使用ReflectionUtils.makeAccessible(field)来访问该字段。 Fortify没有抱怨这个调整。

您可以在here中了解详情。