对某个 class 属性使用 public 是否存在实际的安全风险?
Is there an actual security risk with using public for a certain class attribute?
我知道 public private 和 protected 服务于程序员不要混淆修改数据的正确方法。制作某些数据 public 是否存在某种安全风险?例如,假设我制作了一个使用以下内容的游戏 class :
Class A
{
public:
int speed;
Vector2 position;
void render();
}
如果有人在玩游戏(通过可执行文件),他们是否可以通过某种方式更改速度变量?
If someone was playing the game (from an executable), could there be some way for them to change the speed variable ?
访问修饰符不保护二进制文件中的内存。如果有人知道该值在内存中的位置,那么此人可以修改它。
访问修饰符仅在语言中存在,用于说明应如何访问成员。
public
访问纯粹是编译时 concept/control - 它不会使在运行时修改值变得更难或更容易,例如一个调试器。 class A
对象的内存布局无论如何都会有 speed
和 position
坐在那里。与拥有成员 private
相比,主要区别在于使用该对象的某些客户端代码是否必须有效地调用其他成员函数来影响对这些数据成员的修改——如果这些函数是内联的,那么它可能会结束使用与直接从客户端代码修改数据成员相同的编译代码。
我知道 public private 和 protected 服务于程序员不要混淆修改数据的正确方法。制作某些数据 public 是否存在某种安全风险?例如,假设我制作了一个使用以下内容的游戏 class :
Class A
{
public:
int speed;
Vector2 position;
void render();
}
如果有人在玩游戏(通过可执行文件),他们是否可以通过某种方式更改速度变量?
If someone was playing the game (from an executable), could there be some way for them to change the speed variable ?
访问修饰符不保护二进制文件中的内存。如果有人知道该值在内存中的位置,那么此人可以修改它。
访问修饰符仅在语言中存在,用于说明应如何访问成员。
public
访问纯粹是编译时 concept/control - 它不会使在运行时修改值变得更难或更容易,例如一个调试器。 class A
对象的内存布局无论如何都会有 speed
和 position
坐在那里。与拥有成员 private
相比,主要区别在于使用该对象的某些客户端代码是否必须有效地调用其他成员函数来影响对这些数据成员的修改——如果这些函数是内联的,那么它可能会结束使用与直接从客户端代码修改数据成员相同的编译代码。