簡體   English   中英

加強新線問題

[英]Fortify issue of newLine

我陷入了 java 的問題。 我有以下代碼:

String newLine=System.getProperty("line.seperator");

當我使用它調用它時:

this.writer.write(newLine); //fortify issue

它在配方注射的評論區域給出了強化問題。

有什么解決辦法?

我建議的解決方法是使用有限數量的line.separator 例如\n , | , , , ||| 等。然后您可以創建一個包含所有這些的 static map。 然后,您將使用傳遞的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.seperator 因為如果傳遞了錯誤的 line.seperator 可能會導致惡意代碼注入或錯誤/缺陷。

Fortify 考慮System.getProperty("line.separator");返回的值作為不干凈的用戶輸入,因此,當您開始將此不干凈的字符串直接寫入不允許不干凈字符串的 output 時,會受到關注。

還要注意System.getProperty("line.seperator"); 總是返回 null ...您輸入了鍵名:)

建議的修復

你需要遵循 line.separator 嗎? 這在這里幾乎沒有意義。 如果這是一個完全在本地運行的應用程序(不涉及服務器或 HTTP,它會生成僅在運行該軟件的機器上使用的文件,而不是其他任何地方),盡管遵循平台的行分隔符首選項可能是有意義的實際上,除了 windows 'notepad.exe' 之外,目前在地球上使用的任何軟件都不會以\n作為分隔符。 如果該writer不是本地文件而是其他任何文件,那么直接使用本地分隔符首選項完全沒有意義。

換句話說,忘記 line.separator 屬性。 不僅適用於這個項目,適用於所有項目。 要分隔行,請使用"\n" 時期。 順便說一句,fortify 將不再認為這是一個問題。 line.separator有時(很少,但有時)適用於任何本地運行的應用程序,這些應用程序生成的文件僅供在本地機器上使用。 它在其他任何地方都不合適。

否則..

如果以某種方式遵循平台行分隔符很重要(我真的非常懷疑),一個簡單的方法是鎖定它可能是什么: "\r\n""\n"所以只需使用 if:

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

現在 fortify 注意到,無論哪種方式,它都是代碼內常量,不再認為這是不干凈的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM