Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何修复CWE-470:使用外部控制输入选择类或代码(“不安全反射”)_Java_Reflection_Veracode - Fatal编程技术网

Java 如何修复CWE-470:使用外部控制输入选择类或代码(“不安全反射”)

Java 如何修复CWE-470:使用外部控制输入选择类或代码(“不安全反射”),java,reflection,veracode,Java,Reflection,Veracode,我的代码中有一行470,这是Vera定义的 维拉说要修复: 通过使用白名单或间接输入应用严格的输入验证 选择以确保用户仅选择允许的类 或代码 因此,我创建了一个严格的白名单,说明反射作为一个集合可以访问哪些类名 然后,我将Class.forName包装在一个 有人知道维拉不开枪的原因吗?我觉得我已经遵循了他们建议的补救措施 答案是所有类名必须来自可信源。 唯一受信任的源是类文件中的硬编码字符串。 没有从属性文件读取任何内容,也没有创建并传递到验证机制的集合 它必须看到一个硬编码常量com.dan

我的代码中有一行470,这是Vera定义的

维拉说要修复:

通过使用白名单或间接输入应用严格的输入验证 选择以确保用户仅选择允许的类 或代码

因此,我创建了一个严格的白名单,说明反射作为一个集合可以访问哪些类名

然后,我将Class.forName包装在一个


有人知道维拉不开枪的原因吗?我觉得我已经遵循了他们建议的补救措施

答案是所有类名必须来自可信源。 唯一受信任的源是类文件中的硬编码字符串。 没有从属性文件读取任何内容,也没有创建并传递到验证机制的集合

它必须看到一个硬编码常量com.dang.this.is.strict.ClassName:正在加载。 字符串的硬编码白名单

您可以使用一些很好的验证代码来确保没有什么不好的事情发生,但它不会通过,因为它不是硬编码的字符串。在这种情况下,您可以减轻并提供解释,并希望这对审查结果的人员来说是足够的

他们说

通过使用白名单或间接输入应用严格的输入验证 选择以确保用户仅选择允许的类 或代码


我只是没有意识到白名单在类中是严格的字符串常量。我的错误是认为我可以在运行时用代码构建白名单。有时我需要这样做,所以我将保留我的验证器和索赔缓解措施。

我已设法使用sanitizer类/方法来解决它,该类/方法从硬编码值获取className validate并从字符串返回值-例如:

公共级MySanizizer{

public static String sanitizeClassName(final String className) throws MyException {

    if(!className.equals("com.my.MyClass")) 
        throw new MyException("Class not valid: "  + className);

    return "com.my.MyClass";
}
public static String sanitizeClassName(final String className) throws MyException {

    if(!className.equals("com.my.MyClass")) 
        throw new MyException("Class not valid: "  + className);

    return "com.my.MyClass";
}