Java 加强新线问题

Java 加强新线问题,java,fortify,Java,Fortify,我陷入了java的一个问题。我有以下代码: String newLine=System.getProperty("line.seperator"); 当我使用以下命令调用它时: this.writer.write(newLine); //fortify issue 它在配方注射的评论区域提出了强化问题 解决方案是什么?强化考虑System.getPropertyline.separator返回的值;作为不干净的用户输入,因此,当您开始将这个不干净的字符串直接写入不允许使用

我陷入了java的一个问题。我有以下代码:

String newLine=System.getProperty("line.seperator");
当我使用以下命令调用它时:

this.writer.write(newLine); //fortify issue
它在配方注射的评论区域提出了强化问题


解决方案是什么?

强化考虑System.getPropertyline.separator返回的值;作为不干净的用户输入,因此,当您开始将这个不干净的字符串直接写入不允许使用不干净字符串的输出中时,会引起关注

还要注意System.getPropertyline.Separator;总是返回空值。。。您键入了密钥名称:

建议修复 您需要遵循line.separator吗?这在这里几乎毫无意义;如果这是一个完全在本地运行的应用程序,不涉及服务器或HTTP,它生成的文件仅在运行此软件的计算机上使用,而不在其他地方使用,那么遵循平台的行分隔符首选项可能是有意义的,尽管在实践中,除了windows“notepad.exe”之外,在这一点上,行星上使用的任何软件都不会作为分隔符吐出。如果该编写器不是本地文件而是其他文件,那么直接使用本地分隔符首选项毫无意义

换句话说,忘记line.separator属性。不仅仅是这个项目,所有的项目。要分隔行,请使用\n。时期顺便说一句,福斯特不会再考虑这个问题了。line.separator有时很少使用,但有时适用于任何本地运行的应用程序,这些应用程序生成的文件仅供本地计算机使用。而且这在其他任何地方都不合适

否则 如果以某种方式遵循平台线分隔符很重要,并且我真的非常怀疑,那么一个简单的方法就是锁定它可以是什么:或者\r\n或者\n,所以只需使用If:

String newLine = "\r\n".equals(System.getProperty("line.separator")) ? "\r\n" : "\n";

现在,fortify注意到,无论哪种方式,它都是一个代码内常量,不再认为这是不干净的。

我建议的修复方法是使用有限数量的line.separator。例如\n、、、等。。然后,您可以创建一个包含它们的静态映射。然后,您将使用传递的line.separator,并将其去掉,以获得将使用的实际line.separator的值

Map supportedLineSeperators = Map.of("NEWLINE", "\n", "COMMA", ",", "PIPE", "|", "TRIPLE_PIPE", "|||");

String lineSeperatorKey = System.getProperty("line.separator");

String newLine = supportedLineSeperators.get(lineSeperatorKey);

您必须添加对默认行分隔符的支持。你真的不应该允许任何line.separator,因为如果传递了错误的line.separator,它可能会导致恶意代码注入或错误/缺陷。

你看到的强化错误是什么?嘿,Jose,我有强化扫描报告,它只是向我显示问题类型,即公式注入,我看不到任何错误。问题,您的软件支持的行分隔符的数量是否有限?是否有属性可能是打字错误?@RupendraSingh-separator不等于separator它是否可以修复加固问题?是的。这将修复它,因为您没有使用从代码外部提供的值。因此没有注入安全问题。