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



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

所以我知道在python中有一个"我们都是负责任的用户"的约定,并且在技术上没有类,变量或方法在技术上是真正私有的,不像在C#中,你可以创建公共,受保护和私有实例的功能。

如果我用 C# 编写这个:

// File: Circle.cs
public class Circle() {
private int _Radius;
public int Radius { get => _Radius; set => _Radius = value}
public Circle(int r) 
{ 
Radius = r;
}
}
// File: Program.cs
public static void Main() {
Circle c1 = new Circle(1);
c1.Radius = 2; // Possible, Radius is 2
c1._Radius = 3; // Not possible outside of Circle.cs -> Compilation error
}

它可以与Python中的这个进行比较:

# File: circle.py
class Circle:
def __init__(self, radius):
self.__Radius = radius
def __getR(self):
return self.__Radius
def __setR(self, radius):
self.__Radius = radius
r = property(__getR, __setR)
# File: main.py
from circle import Circle
c1 = Circle(1)
c1.r = 2 # Radius is set to 2
c1.__Radius = 3 # Radius is still 2
c1._Circle__Radius = 4 # Radius is 4

以上演示了 Python 和 C# 的功能差异。

我的问题是:与 C# 相比,缺乏实际的私有变量是否使 python 的安全性降低?

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

如果我用python编程这个库,这个库会比C#库安全吗?

我既不反对python也不反对C#,我只是从爱好者的角度好奇为什么C#对它的私有实例似乎更安全,而python打"负责任"牌并几乎完全将其排除在外。

在研究这个问题时,我偶然发现了这个问题,其中对"反思"进行了一些解释。反射

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

详细阐述:

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

成员辅助功能不是一项安全功能。 它是一种帮助程序员的工具,通过帮助程序员了解给定成员的作者如何使用。 如果有人能够在计算机上运行特权代码,则没有语言功能可以阻止他们访问数据。 您可以使其更难,可以使访问相关数据变得不方便。 但你不能阻止它。

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

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

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

相关内容

  • 没有找到相关文章

最新更新