ID: 495 类型:变量 | 状态:草稿 |
描述
一个声明为public的方法,返回对私有数据结构的引用,然后可以以意外的方式修改该私有数据结构。
相关视图
与“研究层面”视图(CWE-1000)相关
与“开发层面”视图(CWE-699)相关
引入模式
阶段 | 说明 |
实现 |
应用平台
语言
C (出现的可能性不确定)
C++ (出现的可能性不确定)
Java (出现的可能性不确定)
C# (出现的可能性不确定)
后果
范围 | 冲击 | 可能性 |
完整性 | 技术冲击: 修改应用数据 数据结构的内容可以从预期范围之外进行修改。 |
示例
例1
这里,Java类中的公共方法返回对私有数组的引用。假设Java中的数组是可变的,对返回引用进行的任何修改都会反映在原始私有数组中。
(问题代码)
Example Language: Java
private String[] colors;
public String[] getColors() {
return colors;
}
例2
在本例中,color类定义了返回对私有成员(数组类型和整数类型)的非常量引用的函数,然后在类的控制之外对这些成员进行任意更改。
(问题代码)
Example Language: C++
class Color
{
private:
int[2] colorArray;
int colorValue;
public:
Color () : colorArray { 1, 2 }, colorValue (3) { };
int[2] & fa () { return colorArray; } // return reference to private array
int & fv () { return colorValue; } // return reference to private integer
};
int main ()
{
Color c;
c.fa () [1] = 42; // modifies private array element
c.fv () = 42; // modifies private int
return 0;
}
应对措施
阶段: 实现 声明私有方法 |
阶段: 实现 克隆成员数据并将未修改的数据版本保留为对象专用。 |
阶段: 实现 克隆成员数据并将未修改的数据版本保留为对象专用。 |
种属
关系 | 类型 | ID | 名称 |
属于 | 485 | ||
属于 | 884 | ||
属于 | 963 |