首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CurrentCulture和SecurityException

CurrentCulture和SecurityException
EN

Stack Overflow用户
提问于 2011-06-23 02:22:57
回答 1查看 487关注 0票数 1

我们编写了一些使用不变区域性的winForms图形用户界面应用程序。因此,在Main的开始,我们有:

代码语言:javascript
复制
    [STAThread]
    static void Main()
    {
        CultureInfo culture = CultureInfo.InvariantCulture;
        System.Threading.Thread.CurrentThread.CurrentCulture = culture;
        ... 

问题是,在一些机器上,它工作得很好,但在一些机器上(比如x64机器上的调试/任意fro ),它会引发SequrityException

代码语言:javascript
复制
Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

那么它有什么问题呢?为什么它只在某些情况下发生?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-18 07:38:21

另一位post提到了使用不变区域性时的安全问题。也许这就是你的问题?

使用InvariantCulture属性的

InvariantCulture属性既不表示中性也不表示

特定的区域性。它代表了第三种对文化不敏感的文化。它与英语相关,但与国家或地区无关。您的应用程序几乎可以将此属性与System.Globalization命名空间中需要区域性的任何方法一起使用。但是,应用程序应仅对需要与区域性无关的结果的进程使用不变区域性,例如格式化和分析保存到文件中的数据。在其他情况下,它产生的结果可能是语言上不正确的或文化上不合适的。

做出安全决策时的安全注意事项

对于字符串比较或大小写更改的结果,您的应用程序应该使用忽略大小写的序号比较,而不是使用InvariantCulture。Compare()和ToUpper等方法的默认实现使用CurrentCulture属性。如果更改了CurrentCulture,或者如果运行代码的计算机上的区域性与用于测试代码的区域性不同,则执行区分区域性的字符串操作的代码可能会导致安全漏洞。编写字符串操作时所期望的行为与正在执行的计算机上代码的实际行为不同。相比之下,序数比较仅取决于所比较字符的二进制值。

字符串操作(如果应用程序需要执行

不受CurrentCulture值影响的区分区域性的字符串操作,则应使用接受CultureInfo参数的方法。应用程序应为此参数指定InvariantCulture属性的值。应用程序应将该属性与Compare()和ToUpper等方法一起使用,以消除区域性差异并确保一致的结果。有关使用InvariantCulture属性执行不区分区域性的字符串操作的更多信息,请参见不区分区域性的字符串操作。

持久化数据InvariantCulture属性对于以下操作很有用

存储不会直接显示给用户的数据。以与区域性无关的格式存储数据可确保已知格式不会更改。当来自不同区域性的用户访问数据时,可以根据特定用户对数据进行适当的格式化。例如,如果应用程序将DateTime类型存储在文本文件中,并针对固定区域性进行了格式化,则应用程序在调用InvariantCulture存储字符串和调用ToString方法检索字符串时应使用解析属性。此技术可确保当来自不同区域性的用户读取或写入数据时,DateTime类型的基础值不会更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6444636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档