C# 不使用OO封装会产生安全风险吗?

C# 不使用OO封装会产生安全风险吗?,c#,security,oop,C#,Security,Oop,这个问题听起来可能有些愚蠢,但我很好奇,如果暴露像publics这样的对象的字段,会不会在我的应用程序中造成安全风险或漏洞,从而被其他人利用 public class AClass { public int AProperty { get; set; } //Less Secure? public int APublicField; } 谢谢您的代码片段中的两个“字段”基本上是等效的。第一个简单地说就是一个例子。因此,两者都不比另一个更安全。代码段中的两个“字段”本质

这个问题听起来可能有些愚蠢,但我很好奇,如果暴露像publics这样的对象的字段,会不会在我的应用程序中造成安全风险或漏洞,从而被其他人利用

public class AClass
{
    public int AProperty { get; set; }

    //Less Secure?
    public int APublicField;
}
谢谢

您的代码片段中的两个“字段”基本上是等效的。第一个简单地说就是一个例子。因此,两者都不比另一个更安全。

代码段中的两个“字段”本质上是等效的。第一个简单地说就是一个例子。因此,两者都不比另一个更安全。

访问修饰符(public、private、protected)只是一种机制,允许对具有源访问权限的用户进行不同级别的封装。您应该将它们与OOP最佳实践结合使用,以使您的逻辑易于维护。它们与应用程序的安全性完全无关

在C#中,您可以使用RTTI来反映私有数据,就像反映公共数据一样简单。多亏了C#的CLR和二进制兼容性保证,您甚至可以从自己的内部对外部二进制文件执行此操作。即使您不能使用反射,攻击者也可以使用disassembler并将代码作为中间语言进行检查。你可能想看看这个

熟悉该平台的精明攻击者甚至可以寻找有关如何对运行内核级调试器(如)的应用程序进行反向工程的线索

您总是可以尝试使用某种形式的,通过封装您的逻辑来尝试使执行不那么明显,但显然,如果有人足够坚持,他们会找到一种方法

安全性的最佳选择是进行研究并寻找商业和开源的使用良好的库。密码学的曝光率越高越好,因为库开发人员和白帽可以在发现漏洞时协作修复漏洞。

访问修饰符(公共、私有、受保护)只是一种机制,允许对具有源访问权限的用户进行不同级别的封装。您应该将它们与OOP最佳实践结合使用,以使您的逻辑易于维护。它们与应用程序的安全性完全无关

在C#中,您可以使用RTTI来反映私有数据,就像反映公共数据一样简单。多亏了C#的CLR和二进制兼容性保证,您甚至可以从自己的内部对外部二进制文件执行此操作。即使您不能使用反射,攻击者也可以使用disassembler并将代码作为中间语言进行检查。你可能想看看这个

熟悉该平台的精明攻击者甚至可以寻找有关如何对运行内核级调试器(如)的应用程序进行反向工程的线索

您总是可以尝试使用某种形式的,通过封装您的逻辑来尝试使执行不那么明显,但显然,如果有人足够坚持,他们会找到一种方法


安全性的最佳选择是进行研究并寻找商业和开源的使用良好的库。密码学的曝光率越高越好,因为库开发人员和白帽可以合作修复发现的漏洞。

事实上,setter和getter只是OOP的历史最佳实践

您公开的两个解决方案都不尊重封装,因为当您更改属性的名称或类型时,必须在使用它的所有类中更改它


然而,public属性的一个优点是您获得的代码更少,这有助于轻松理解和维护代码。

事实上,setter和getter只是OOP的一个历史最佳实践

您公开的两个解决方案都不尊重封装,因为当您更改属性的名称或类型时,必须在使用它的所有类中更改它

然而,public属性的一个优点是您获得的代码更少,这有助于轻松理解和维护代码