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

相关推荐
leoZ2319 分钟前
2026-09-09-springboot-cloud-deploy-pitfalls
java·前端·javascript·vue.js·人工智能·spring boot·后端
秦老师Q17 分钟前
php零基础入门到实战,从语法到框架,一篇搞定
开发语言·php
驭渊的小故事1 小时前
多线程02
java·开发语言·jvm
阿里嘎多学长1 小时前
2026-09-09 GitHub 热点项目精选
开发语言·程序员·github·代码托管
随遇而安zx1 小时前
【多线程】---实战:CompletableFuture编排
java·多线程·并发
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之HTTP请求结构与认证基础
java·spring·http
君顾11 小时前
本地折扣卡 CPS 平台搭建:从系统架构到落地实战
java·开发语言·折扣卡
liangshanbo12152 小时前
手写 Function.prototype.call 与 Function.prototype.apply 面试题满分答案
开发语言·javascript·原型模式
Zenova EdgeOS2 小时前
C++ 工业边缘 libcurl HTTP 客户端实战
开发语言·c++·网络协议·边缘计算
Java小白笔记2 小时前
Java 单元测试怎么写:JUnit 5、Mockito 与 Spring Boot 方法级实战
java·junit·单元测试