应用软件安全编程--07当比较 local相关的数据时,指定恰当的 local

当locale没有明确指定的时候,使用 locale相关的方法处理与 local相关的数据会产生意想不到的 结果。编程语言标识符、协议关键字以及 HTML 标签通常会指定 Locale.ENGLISH 作为一个特定的 locale。 在不同的 locale环境中运行程序可能会导致意外的程序行为,甚至允许攻击者绕过输入过滤 器。由于这些原因,在比较数据时,如果可能与locale方法相关,则应指定相应的 locale。

例如下面程序代码:

java 复制代码
public  class  Example  {

public    static   void   main(String[]    args){

System.out.println("Title".toUpperCase());

 }

 }

在英文 locale 环境下:

TITLE

然而,大多数语言使用的拉丁字母i的大写形式是I,但土耳其语言环境是个例外:有一个点的i的大写形式也有一个点(1),没有点I大写形式没有点(I)。 在土耳其 locale(API 2006)会产生下面预期之外的结果:

TiTLE

许多程序只使用依赖于locale方法来输出信息,如果 locale相关的数据,程序没有显示设置 locale, 则可以安全地依赖于默认的 locale 设置。

对于指定恰当的local 的情况,示例1给出了不规范用法(Java 语言)示例。示例2给出了规范用法 (Java 语言)示例

java 复制代码
示例1:

public static void processTag(String tag){

if (tag.toUpperCase(),equals("SCRIPT")){

return;

 }

// Process tag

 }

在英语 locale中 "script" 大写转换成"SCRIPT", 而在土耳其 locale 环境中,将"script"大写转换 成"SCRiPT"。

java 复制代码
示例2:

public static void process Tag(String tag){

if (tag.toUpperCase(Locale.ENGLISH).equals("SCRIPT")){

return;

 }

//  Process  tag

 }

代码中将 locale 设置为英文,从而避免意外的情况。

相关推荐
像我这样帅的人丶你还14 小时前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩14 小时前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
tntxia14 小时前
Mybatis的日志输入
java
亦暖筑序16 小时前
Java 8老系统Browser Agent实战:三层拦截把AI操作后台变成可审计流程
java·后端·设计模式
用户2986985301419 小时前
Java 实现 Word 文档加密与权限解除
java·后端
Yeats_Liao20 小时前
14:Servlet中的页面跳转-Java Web
java·后端·架构
未秃头的程序猿20 小时前
告别"if-else地狱"!Java 21模式匹配,代码优雅了10倍
java·后端·面试
鹤望兰67520 小时前
字节跳动国际支付-后端开发-三面面经
java
Flittly20 小时前
【AgentScope Java新手村系列】(14)人机交互
java·spring boot·spring
RainCity20 小时前
Java Swing 自定义组件库分享(十二)
java·笔记·后端