我有一个 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)
我再次对应用程序运行强化扫描。但是,第二次,强化扫描在同一位置显示区域设置错误。
我该如何解决此类问题?
问题类别“可移植性缺陷:区域设置相关性比较”(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
//在这里查看示例代码
| 归档时间: |
|
| 查看次数: |
8181 次 |
| 最近记录: |