《Java安全编码标准》一2.10 IDS09-J如果没有指定适当的locale,不要使用locale相关方法处理与locale相关的数据...

本文讨论了在编程中处理与locale相关的数据时可能出现的问题,并提供了解决方案。建议在使用locale相关方法时,显式指定locale以避免意料之外的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.10 IDS09-J如果没有指定适当的locale,不要使用locale相关方法处理与locale相关的数据

当locale没有明确指定的时候,使用locale相关的方法处理与locale相关的数据会产生意想不到的后果。编程语言的标示符、协议关键字以及HTML标签通常会指定Locale.ENGLISH作为一个特定的locale。当改变默认的locale的时候,很有可能使数据绕过检查,从而改变locale相关方法的行为。比如,当把一个字符串转换为大写字符时,可认为它是合法的,然而,当把它接着转换回小写字符时,可能就会产生黑名单字符串。
任何一个程序调用locale相关方法时,如果使用非受信数据,必须显式指明使用这些方法的locale。

2.10.1 不符合规则的代码示例

这个代码示例中使用了locale相关的String.toUpperCase()?方法来将HTML标签转换为大写字符。在英文locale中,会将“title” 转换为 “TITLE”,在土耳其locale中,会将“title” 转换为 “T?TLE”,其中的“?”是拉丁文字母“I”,它在字符上是有一个点的[API 2006]。

"title".toUpperCase();

2.10.2 符合规则的方案(显式的locale)

该方案显式地将locale设置为英文,从而避免产生意想不到的问题。

"title".toUpperCase(Locale.ENGLISH);

这条规则同样适用于?String.equalsIgnoreCase()方法。

2.10.3 符合规则的方案(默认locale)

符合规则的方案在对字符串数据进行处理之前,把默认的locale设置为English。

Locale.setDefault(Locale.ENGLISH);
"title".toUpperCase();

2.10.4 风险评估

如果没有指定合适的locale,那么当使用locale相关方法处理与locale相关的数据时,会产生意外的行为。
image

2.10.5 参考书目

image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值