我在代码的一行上得到了470,这是Vera所定义的。
Vera说要解决:
使用白名单或间接应用严格的输入验证 选择以确保用户仅选择允许的类 或代码。
因此,我创建了一个严格的白名单,列出了哪些类名反射可以以Set<String>
的身份访问
然后我将Class.forName
包裹在
if (whitelist.contains(className) {
Veracode still fires in here with a 470
}
谁知道维拉不启动该修复程序的样子?我觉得我已经按照他们的建议进行了补救。
答案 0 :(得分:1)
我设法使用消毒剂类/方法来解决它,该方法使className生效并从硬编码值返回String中的值-例如:
公共类MySanitizer {
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";
}
答案 1 :(得分:0)
答案是所有类名都必须来自受信任的来源。 唯一受信任的来源是类文件中的硬编码字符串。 无需读取属性文件,也无需创建任何集合并将其传递给验证机制。
它必须看到正在加载硬编码的常量“ com.dang.this.is.strict.ClassName:”。 字符串的硬编码白名单。
您可以使用一些不错的验证代码来确保没什么不好的事情发生,但是由于不是硬编码的字符串,因此不会通过。在这种情况下,您可以减轻负担并提供解释,并希望它对检查结果的人员足够。
他们说
使用白名单或间接应用严格的输入验证 选择以确保用户仅选择允许的类 或代码。
我只是没有意识到白名单严格是类中的字符串常量。我的错误是认为我可以在运行时在代码中建立白名单。有时候我需要这样做,所以我将保留我的验证器并要求缓解措施。