字符串格式的文件位置



在Java中,这些是相同的吗?

new File (a.getPath() + filename);
new File (String.format(a.getPath() + filename));

我在findbugs中得到一些警告,第二个选项似乎可以修复它。

在我看来都是糟糕的选择。如果想法是将目录名与文件名结合起来,则使用专门为此设计的File构造函数:

new File(a.getPath(), filename)

(我不明白为什么使用String.format会修复警告,但由于我们不知道警告是什么,所以很难猜测。但这肯定会使它更加脆弱,因为字符串将被解释为格式模式,这可能不是。)

String.format()不做任何事情,除非你的字符串是一个格式字符串,你添加额外的参数,所以在这种情况下,它看起来像你只是隐藏警告。最有可能的是FindBugs知道new File(a + b);可能是一个错误,但不能告诉new File(someFunction());是不是一个错误。

根据PT_RELATIVE_PATH_TRAVERSAL文档:

软件使用HTTP请求参数来构造路径名这应该在一个受限制的目录中,但它没有正确中和诸如".."之类的序列,这些序列可以解析为在那个目录之外。看到网址:http://cwe.mitre.org/data/definitions/23.html

FindBugs只查找最明显的相对错误路径遍历。如果FindBugs找到了,那么几乎可以肯定还有更多FindBugs没有报告的漏洞。如果你担心关于相对路径遍历,您应该认真考虑使用商业静态分析或渗透测试工具。

所以,String.format()技巧是有效的,因为FindBugs只能捕获这种明显的情况,但更大的问题似乎是这会导致安全漏洞:

这允许攻击者遍历文件系统以访问受限制目录之外的文件或目录。

目前还不清楚是什么原因导致FindBugs显示此警告,因为您没有发布代码,但听起来可能相当严重。您可能希望实际修复此问题,而不是忽略警告。

  1. 使用String.format传递静态值是奇怪的。

  2. 不是Findbugs报告的所有内容都是问题。Findbugs可以报告"误报"。

如上所述,使用new File(a.getPath(), filename)将路径段添加到另一个路径。

相关内容

  • 没有找到相关文章

最新更新