固定强化扫描区域设置更改再次出现

时间:2016-07-11 13:55:05

标签: java fortify

我有一个J2EE应用程序,对于该应用程序,强化扫描显示与语言环境相关的问题。

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

firstName.trim().toLowerCase();

现在

firstName.trim().toLowerCase(Locale.ENGLISH);

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

有谁知道,我该如何解决这些问题?

谢谢, 杰

1 个答案:

答案 0 :(得分:1)

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

<强> 基本原理 当&#34; java.lang.String.toUpperCase()/ toLowerCase()&#34;如果在未设置区域设置的情况下使用,它将使用默认区域设置。这可能导致绕过安全检查。例如,我们想要排除&#34; script&#34;来自用户输入;如果默认语言是土耳其语,则tag.toUpperCase()返回&#34; T \ u0130TLE&#34;,其中&#34; \ u0130&#34;是我在上面的“拉丁文大写字母”#34;字符。因此,&#34;脚本&#34;检查被绕过。

if (tag.toUpperCase().equals("SCRIPT")){
  return null;}

<强> 补救

(1)您可以在启动VM时设置语言,并标记问​​题&#34;不是问题&#34;

java -Duser.language=en -Duser.country=US -Duser.variant=US MainClass

(2)或者,按代码设置语言

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")); 

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

//参见示例代码here