gpt4 book ai didi

c# - 访问级别和修饰符(私有(private)、密封等)是否在 C# 中用于安全目的?

转载 作者:可可西里 更新时间:2023-11-01 08:30:29 24 4
gpt4 key购买 nike

我看到你可以操纵 private and internal members using reflection .我还看到它说 'sealed' class is more secure that one that isn't .

修饰符“public、protected、internal、private、abstract、sealed、readonly”是否只是关于设计和 API 使用的君子协定,只要您可以访问反射就可以打破?如果黑客已经在运行调用您的 API 的代码,那么游戏就已经输了,对吧?

下面的类是否比其他类更安全?

//private class
sealed class User
{
private string _secret = "shazam";
public readonly decimal YourSalary;
public string YourOffice{get;};
private DoPrivilegedAction()
{
}
}

最佳答案

首先,回答您的问题:安全系统旨在保护良好用户免受错误代码的侵害;它显然不是为了保护好的代码免受不良用户的侵害。您的访问限制减轻了部分受信任的恶意代码对您用户的攻击。它们不会减轻来自恶意用户对您的代码的攻击。如果威胁是恶意用户获取您的代码,那么您就有大问题了。安全系统根本无法减轻这种威胁。

其次,解决之前的一些答案:理解反射和安全之间的完整关系需要仔细注意细节并很好地理解 CAS 系统的细节。先前发布的回答指出安全和访问之间没有联系是因为反射是误导和错误的。

是的,反射允许您覆盖“可见性”限制(有时)。这并不意味着访问和安全之间没有联系。联系在于使用反射覆盖访问限制的权利以多种方式与CAS系统紧密联系。

首先,为了任意这样做,CAS 系统必须授予代码私有(private)反射权限。这通常只授予完全受信任的代码,毕竟这些代码已经可以任何了。

其次,在新的 .NET 安全模型中,假设程序集 A 被 CAS 系统授予了程序集 B 授权集的超集。在这种情况下,允许程序集 A 中的代码使用反射来观察 B 的内部结构。

第三,当您将动态生成的代码混入其中时,事情会变得非常复杂。解释“Skip Visibility”与“Restricted Skip Visibility”的工作原理,以及它们如何在运行时吐出代码的情况下改变反射、访问控制和安全系统之间的交互,这将花费我比我更多的时间和空间有可用的。如果您需要详细信息,请参阅 Shawn Farkas 的博客。

关于c# - 访问级别和修饰符(私有(private)、密封等)是否在 C# 中用于安全目的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/891018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com