我有一个J2EE应用程序,对于该应用程序,强化扫描显示与语言环境相关的问题。
我已经解决了在比较字符串时在toUpperCase(Locale.ENGLISH)和toLowerCase(Locale.ENGLISH)函数中使用Locale.ENGLISH的问题, 早些时候,
firstName.trim().toLowerCase();
现在
firstName.trim().toLowerCase(Locale.ENGLISH);
我再次在应用程序上运行强化扫描。但是,第二次,强化扫描会在同一位置显示区域设置错误。
有谁知道,我该如何解决这些问题?
谢谢, 杰
答案 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