固定强化扫描区域设置更改重新出现

Jay*_*tel 4 java fortify

我有一个 J2EE 应用程序,对于该应用程序,强化扫描显示区域设置相关问题。

我已经解决了在比较字符串时在 toUpperCase(Locale.ENGLISH) 和 toLowerCase(Locale.ENGLISH) 函数中使用 Locale.ENGLISH 的问题,较早,

firstName.trim().toLowerCase();
Run Code Online (Sandbox Code Playgroud)

现在

firstName.trim().toLowerCase(Locale.ENGLISH);
Run Code Online (Sandbox Code Playgroud)

我再次对应用程序运行强化扫描。但是,第二次,强化扫描在同一位置显示区域设置错误。

我该如何解决此类问题?

use*_*982 5

问题类别“可移植性缺陷:区域设置相关性比较”(RULEGUID=D8E9ED3B-22EC-4CBA-98C8-7C67F73CCF4C) 属于“代码质量”王国,是一个低风险问题。我通常不修复它。

基本原理 当使用“java.lang.String.toUpperCase()/toLowerCase()”而不设置语言环境时,它将使用默认语言环境。这可能会导致绕过安全检查。例如,我们想从用户输入中排除“脚本”;如果默认语言是土耳其语,则 tag.toUpperCase() 返回“T\u0130TLE”,其中“\u0130”是“拉丁文大写字母 I WITH DOT”字符。因此绕过了“脚本”检查。

if (tag.toUpperCase().equals("SCRIPT")){
  return null;}
Run Code Online (Sandbox Code Playgroud)

修复

(1) 可以在启动VM时设置语言,并将问题标记为“不是问题”

java -Duser.language=en -Duser.country=US -Duser.variant=US MainClass
Run Code Online (Sandbox Code Playgroud)

(2) or, 通过代码设置语言

import java.util.Locale;
//be aware that Locale.setDefault is global, below set locale to en_US_WIN
    Locale.setDefault(new Locale("en", "US", "WIN")); 
Run Code Online (Sandbox Code Playgroud)

(3) 或者,如果客户端使用不同的语言,使用 HttpServletRequest.getLocale

//在这里查看示例代码