应用软件安全编程--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 设置为英文,从而避免意外的情况。

相关推荐
人活一口气11 小时前
Spring Boot与AIGC的完美结合:从零搭建智能内容生成平台
java·spring boot·aigc
像我这样帅的人丶你还13 小时前
Java 后端详解(三):全局异常处理与 JPA 数据库映射
java·后端
NE_STOP13 小时前
vibe Coding -- 小项目实战
java
未秃头的程序猿19 小时前
Java 26正式发布!这3个新特性,让代码量直接减半
java·后端·面试
用户2986985301419 小时前
Word 文档文本查找与替换的 Java 实现方案
java·后端
阿哉19 小时前
Nacos 服务发现源码:藏在背后的两套事件机制,90%的人只讲了一半
java
咖啡八杯20 小时前
GoF设计模式——命令模式
java·设计模式·架构
AI人工智能_电脑小能手20 小时前
【大白话说Java面试题 第125题】【并发篇】第25题:说说 Java 线程的中断机制
java·后端·面试
Java内核笔记20 小时前
Spring Security 源码解析(六)无状态 JWT 实践:Session 共享与自定义过滤器
java·后端
荣码20 小时前
LangGraph多Agent协作:3个Agent干活比1个强,但我踩了4个坑
java·python