CurrentCulture and SecurityException

本文关键字:SecurityException and CurrentCulture | 更新日期: 2023-09-27 18:00:20

我们编写了一些使用不变文化的winForms GUI应用程序。所以在Main的开头我们有:

    [STAThread]
    static void Main()
    {
        CultureInfo culture = CultureInfo.InvariantCulture;
        System.Threading.Thread.CurrentThread.CurrentCulture = culture;
        ... 

问题是,在某些机器上它工作得很好,但在某些配置的机器上(如x64机器的调试/AnyCPU)它会引发SequityException

Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

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

CurrentCulture and SecurityException

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

使用不变量文化属性

The InvariantCulture property represents neither a neutral nor a

特定文化。它代表了第三种类型的文化对文化不敏感。它与英语有关,但与国家或地区无关。您的应用程序可以使用此属性使用System.Globalization命名空间中的几乎任何方法需要一种文化。但是,应用程序应该使用不变量仅针对需要与文化无关的结果的过程的文化,诸如格式化和解析持久化到文件中的数据。在里面在其他情况下,它产生的结果可能是语言学上的不正确的或文化上不恰当的。

Security Considerations If a security decision will be made based

根据字符串比较或大小写更改的结果,您的应用程序应该使用忽略大小写的顺序比较,而不是使用不变文化。方法的默认实现,例如Compare()()和ToUpper使用CurrentCulture属性。编码执行区域性敏感的字符串操作会导致安全如果CurrentCulture被更改,或者如果运行代码的计算机与用于测试密码编写字符串操作时所期望的行为与代码在执行时的实际行为不同计算机相反,有序比较仅取决于比较字符的二进制值。

String Operations If your application needs to perform a

不受值影响的区域性敏感字符串操作对于CurrentCulture,它应该使用一个接受CultureInfo的方法参数应用程序应指定此参数的InvariantCulture属性。应用程序应将该属性与Compare()()和ToUpper等方法一起使用消除文化差异,确保结果一致。了解更多信息有关使用InvariantCulture属性执行的信息不区分区域性的字符串操作,请参阅区域性不区分字符串操作。

Persisting Data The InvariantCulture property is useful for

存储将不会直接向用户显示的数据。存储独立于区域性的格式中的数据保证了已知的格式不会改变。当来自不同文化的用户访问数据时,可以基于特定用户对其进行适当的格式化。例如如果应用程序将DateTime类型存储在格式化的文本文件中对于不变区域性,应用程序应使用调用ToString存储字符串时的InvariantCulture属性以及用于检索字符串的Parse方法。此技术可确保DateTime类型的基础值在数据由来自不同文化的用户读取或写入。

相关文章:
  • 没有找到相关文章