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

相关推荐
时光追逐者10 小时前
一款基于 C# 开发的 Windows 10/11 系统增强工具,精简、优化、定制一站完成!
开发语言·windows·c#·.net
测试员周周10 小时前
【AI测试功能6】功能测试的自动化率:哪些该自动、哪些必须人工——AI测试人机协作决策指南
开发语言·人工智能·python·功能测试·单元测试·自动化·测试用例
亚马逊云开发者10 小时前
Lambda 冷启动改善了,你的 Provisioned Concurrency 可能白花钱了
java
绿豆人11 小时前
进入内核-中断开启
开发语言·c#
小杍随笔11 小时前
【Rust桌面革命:Tauri×Dioxus——架构对决、实战拆解与2026选型杀招】
开发语言·架构·rust
计算机安禾11 小时前
【c++面向对象编程】第4篇:类与对象(三):拷贝构造函数与深浅拷贝问题
开发语言·c++·算法
j_xxx404_11 小时前
Linux共享内存原理与实战:从内核到C++实现|附源码
linux·运维·开发语言·c++·人工智能
C雨后彩虹11 小时前
猴子爬山问题
java·数据结构·算法·华为·面试
天真吴邪xie11 小时前
Claude Code安装
java·git
小新同学^O^11 小时前
简单学习 --> Spring统一处理
java·学习·spring·统一功能处理