不存在的私有变量是否会使python不如C#安全?

不存在的私有变量是否会使python不如C#安全?,c#,python,security,C#,Python,Security,我目前正在一门课程中学习C#,由于我有python背景,因此遇到了一个讨论点。关于这个讨论,我遇到了一个问题:python与C#相比有多安全? 因此,我知道python中有“我们都是负责任的用户”的约定,并且没有任何类、变量或方法在技术上是真正私有的,这与C#中不同,在C#中,您具有公开、保护和私有实例的功能 如果我用C写这个: //文件:Circle.cs 公共阶级圈子(){ 私有整数半径; 公共整数半径{get=>\u Radius;set=>\u Radius=value} 公众圈(内环)

我目前正在一门课程中学习C#,由于我有python背景,因此遇到了一个讨论点。关于这个讨论,我遇到了一个问题:python与C#相比有多安全?

因此,我知道python中有“我们都是负责任的用户”的约定,并且没有任何类、变量或方法在技术上是真正私有的,这与C#中不同,在C#中,您具有公开、保护和私有实例的功能

如果我用C写这个:

//文件:Circle.cs
公共阶级圈子(){
私有整数半径;
公共整数半径{get=>\u Radius;set=>\u Radius=value}
公众圈(内环)
{ 
半径=r;
}
}
//文件:Program.cs
公共静态void Main(){
圆圈c1=新圆圈(1);
c1.半径=2;//可能,半径为2
c1._Radius=3;//不可能在Circle.cs之外->编译错误
}
这在某种程度上可以与Python中的比较:

#文件:circle.py
班级圈子:
定义初始(自身,半径):
自身半径=半径
def__getR(自身):
返回自我半径
def设置器(自身,半径):
自身半径=半径
r=属性(_getR,_setR)
#文件:main.py
从圆导入圆
c1=圆(1)
c1.r=2#半径设置为2
c1._半径=3#半径仍为2
c1._圆_半径=4#半径为4
上面演示了Python和C#的功能差异

我的问题是:与C#相比,缺少实际的私有变量是否会使python更不安全

毕竟。如果我写一个某种加密库,用C语言编程是有意义的——纯粹出于安全考虑,不是吗?据我所知,我无法阻止任何人在用python编程时滥用我在上述库中提供的私有变量,而在C#中,我可以创建一个库,当在另一个程序中使用时,不允许访问内部使用的私有变量

如果我用python编程said库,该库的安全性会比C#one差吗?

我既不反对python,也不反对C#,我只是从爱好者的角度好奇,为什么C#在它的私有实例中看起来更安全,而python打的是“负责任”牌,几乎完全不使用它

在研究这一点的时候,我偶然发现了“反思”一词。倒影

在这个问题中,我并不是指单元测试,在这里,您可以假设您无论如何都可以访问源代码,并且可以将属性更改为public

详细说明:


如果在C#中有一个编译库a,在Python中有一个编译库B,那么在试图访问私有数据时,这两个库在安全性或隐私方面的比较如何?

成员可访问性不是一个安全特性。它是一种帮助程序员理解给定成员的作者打算如何使用的工具。如果有人能够在机器上运行特权代码,那么就没有语言功能阻止他们访问数据。你可以让它变得更难,你可以让它不方便访问有问题的数据。但你无法阻止它

如果程序员正在使用您的库,那么您无法阻止他们访问和更改代码中的任何“私有”数据。如果他们这样做了,那么他们只是知道他们不再能够依靠您的代码来正确工作。这相当于把你买的东西拆开,修补一下,然后重新组装起来。如果你做错了,你可能会弄坏一些东西,而且(大多数事情)不是为了让你这么做而设计的,但它们不能阻止你这么做

如果您正在编写代码,并且需要存储的私有数据对最终用户不可访问,那么您不能让他们在自己的机器上运行它。您需要让他们向您的服务器发出请求,运行您的敏感代码,将您不希望他们访问的所有信息完全保留在您自己的专用服务器上,然后向他们发送一个响应,其中包含您希望他们能够拥有的任何结果信息


除了极少数例外,所有语言都是如此。

因此,从技术上讲,在C语言中使用编译库时,从中获取数据与在python中一样容易或困难,对吗?除此之外,如果我有一台运行C#或Python代码的服务器,如果有人获得服务器访问权限,那么私有成员的访问权限到底有多大?在这种情况下,在可访问性或安全性方面是否存在差异?@HackXIt这是尽可能的。这可能或多或少是方便的。由于没有Python中的代码,我无法评论哪个更容易。无论是在哪种情况下,还是在使用任何其他语言编写代码时,这都是可能的。毕竟,您始终可以使用操作系统查看实际内存,查看存储数据的值,即使该语言不公开任何访问该值的方法(尽管几乎所有通用编程语言都公开访问私有字段的方法)。我想是这样的,最终总是有可能获得所有语言的访问权限。但在我看来,在用python写东西时,你似乎是在分发安全性,而在C#中,至少你需要先跳过某种围栏。@HackXIt这就像挂上一个禁止侵入的标志。它并没有阻止任何人做你不想让他们做的事情,它只是告诉他们你不想让他们做,所以他们知道他们在做不应该做的事情。它不是一种安全机制,它仅仅是向代码用户提供的关于如何使用的文档