CWE

常见的弱点枚举

一个由社区开发的软件&硬件缺陷类型的列表

2021 CWE最重要的硬件的弱点
CWE最危险的弱点
>CWE列表> CWE -个人字典定义(4.10)
ID

cwe - 492:使用内部类包含敏感数据

弱点ID: 492
抽象:变体
结构:简单的
视图定制的信息:
+描述
内部类是翻译成类,可在计划范围和可能公开代码,程序员为了保持私人攻击者。
+扩展描述
内部类悄悄介绍几个安全问题因为他们翻译成Java字节码。在Java源代码中,似乎一个内部类可以声明只能封闭类,但是Java字节码没有一个内部类的概念,所以编译器必须将一个内部类声明转换成一个对等类与原有包级别访问外部类。更多的在不知不觉中,因为一个内部类可以访问私有字段在包含它的类中,一旦一个内部类成为同行类的字节码,编译器将私有字段访问的内部类转化为受保护的领域。
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 668年 曝光资源错误的球体
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
实现
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

Java患病率(待定)

+常见的后果
部分帮助这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 影响 可能性
保密

技术的影响:读取应用程序数据

“内部类”数据机密性方面通常可以被克服。
+利用的可能性
媒介
+示范例子

示例1

下面的Java小程序代码错误地使用了一个内部类。

(坏的代码)
例如语言:Java
最后公共类urlTool延伸Applet {
私人最终类urlHelper {
}
}

示例2

下面的示例显示了一个内部类的基本使用。这个类包含私有成员内部类InnerClass OuterClass。私有内部类InnerClass包括方法访问类的私有成员变量concat OuterClass输出的值的一个类的私有成员变量OuterClass并返回一个字符串,该字符串的连接的一个类的私有成员变量OuterClass,分隔符输入参数的方法和类的私有成员变量InnerClass。

(坏的代码)
例如语言:Java
公开课OuterClass {
/ /私有成员变量OuterClass
私人字符串memberOne;
私人字符串memberTwo;

/ /构造函数OuterClass
瓦伦公共OuterClass(字符串,字符串varTwo) {
这一点。memberOne =瓦伦;
这一点。memberTwo = varTwo;
}

/ / InnerClass OuterClass成员内部类
私有类InnerClass {
私人字符串innerMemberOne;

公共InnerClass(字符串innerVarOne) {
这一点。innerMemberOne = innerVarOne;
}

公共字符串concat(字符串分隔符){
/ / InnerClass OuterClass访问私有成员变量
system . out。println (“memberOne价值是:”+ memberOne);
OuterClass.this返回。memberTwo +分离器+ this.innerMemberOne;
}
}
}

虽然这是一个可接受的使用内部类演示了一个内部类的内部类的弱点完全访问所有包含类的成员变量和方法甚至包括那些声明私有和保护。当内部类被编译和翻译成Java字节码JVM将内部类作为一个同行类包级别访问封闭类。

为了避免这种弱点的内部类,可以考虑使用静态内部类,局部内部类,或匿名内部类。

下面的Java示例演示了使用静态内部类使用前面的例子。内部类InnerClass声明使用静态修饰符,表明InnerClass OuterClass封闭类的静态成员。通过声明一个内部类作为一个封闭的类的静态成员,其他内部类只能访问静态成员和方法的封闭类和防止内部类访问非静态的成员变量和方法的封闭类。在这种情况下,内部类InnerClass只能访问静态成员变量包含的类memberTwo OuterClass但不能访问非静态的成员变量memberOne。

(好的代码)
例如语言:Java
公开课OuterClass {

/ /私有成员变量OuterClass
私人字符串memberOne;
私有静态字符串memberTwo;

/ /构造函数OuterClass
瓦伦公共OuterClass(字符串,字符串varTwo) {
这一点。memberOne =瓦伦;
这一点。memberTwo = varTwo;
}

/ / InnerClass OuterClass静态内部类
私有静态类InnerClass {

私人字符串innerMemberOne;

公共InnerClass(字符串innerVarOne) {
这一点。innerMemberOne = innerVarOne;
}
公共字符串concat(字符串分隔符){
/ / InnerClass OuterClass只有访问静态成员变量
返回memberTwo +分离器+ this.innerMemberOne;
}
}
}

唯一的限制与使用静态内部类是一个静态的封闭类成员内部类没有对封闭类的实例的引用。在很多情况下这可能不是理想的。另一种方法是使用一个本地内部类或一个匿名内部类,下一个例子所示。

示例3

在下面的例子中BankAccount类包含的私有成员内部类InterestAdder添加感兴趣的银行账户的平衡。BankAccount类的start方法创建内部类的对象InterestAdder, InterestAdder内部类实现了ActionListener接口的actionPerformed方法。定时器对象中创建开始BankAccount类的方法调用的actionPerformed方法InterestAdder类每30天添加银行帐户余额的利息基于利率传递到start方法作为输入参数。内部类InterestAdder需要访问私有成员变量BankAccount类为了平衡利益添加到银行账户的平衡。

然而如前面的例子所示,这是因为InterestAdder BankAccount类的非静态成员内部类,InterestAdder也BankAccount类的私有成员变量的访问,包括私有成员变量中包含敏感数据的银行帐户所有者的名字,社会安全号码、银行帐户号码。

(坏的代码)
例如语言:Java
公开课BankAccount {

/ / BankAccount类的私有成员变量
私人字符串accountOwnerName;
私人字符串accountOwnerSSN;
私人int accountNumber;
私人双平衡;

/ /为BankAccount类构造函数
accountOwnerSSN accountOwnerName公共BankAccount(字符串,字符串,
int accountNumber、双initialBalance int initialRate)
{
这一点。accountOwnerName = accountOwnerName;
这一点。accountOwnerSSN = accountOwnerSSN;
这一点。accountNumber = accountNumber;
这一点。平衡= initialBalance;
this.start (initialRate);
}

/ /启动方法将增加利益平衡每30天

/ /创建计时器对象和兴趣添加动作侦听器对象
公共空间开始(双)
{
ActionListener加法器= new InterestAdder(率);
计时器t =新计时器(1000 * 3600 * 24 * 30,加法器);
t.start ();
}

/ / InterestAdder BankAccount类的内部类

/ /实现ActionListener接口
私人类InterestAdder实现ActionListener
{
私人双率;

公共InterestAdder(双aRate)
{
这一点。率= aRate;
}

公共空间actionPerformed (ActionEvent事件)
{
/ /更新的兴趣
= BankAccount.this双重利益。平衡*率/ 100;
BankAccount.this。平衡+ =利息;
}
}
}

在下面的示例InterestAdder类从上面的例子是本地声明在BankAccount类的start方法。作为本地内部类InterestAdder有其范围限制的方法(或封闭块)宣布,在这种情况下,只有开始的方法访问内部类InterestAdder,没有其他类包括封闭类的内部类知识以外的方法开始。这允许内部类访问私有成员变量的封闭类但只有封闭方法或块的范围内。

(好的代码)
例如语言:Java
公开课BankAccount {

/ / BankAccount类的私有成员变量
私人字符串accountOwnerName;
私人字符串accountOwnerSSN;
私人int accountNumber;
私人双平衡;

/ /为BankAccount类构造函数
accountOwnerSSN accountOwnerName公共BankAccount(字符串,字符串,
int accountNumber、双initialBalance int initialRate)
{
这一点。accountOwnerName = accountOwnerName;
这一点。accountOwnerSSN = accountOwnerSSN;
这一点。accountNumber = accountNumber;
这一点。平衡= initialBalance;
this.start (initialRate);
}

/ /启动方法将增加利益平衡每30天

/ /创建计时器对象和兴趣添加动作侦听器对象
公共空间开始(最终双率)
{

/ / InterestAdder本地内部类

/ /实现ActionListener接口
类InterestAdder实现ActionListener
{
公共空间actionPerformed (ActionEvent事件)
{
/ /更新的兴趣
= BankAccount.this双重利益。平衡*率/ 100;
BankAccount.this。平衡+ =利息;
}
}
ActionListener加法器= new InterestAdder ();
计时器t =新计时器(1000 * 3600 * 24 * 30,加法器);
t.start ();
}
}

类似的方法是使用一个匿名内部类是在下一个示例中演示。声明一个匿名内部类没有名称和只创建一个内部类的实例对象。与前面的示例匿名内部类有其范围限制在BankAccount类的方法开始。

(好的代码)
例如语言:Java
公开课BankAccount {

/ / BankAccount类的私有成员变量
私人字符串accountOwnerName;
私人字符串accountOwnerSSN;
私人int accountNumber;
私人双平衡;

/ /为BankAccount类构造函数
accountOwnerSSN accountOwnerName公共BankAccount(字符串,字符串,
int accountNumber、双initialBalance int initialRate)
{
这一点。accountOwnerName = accountOwnerName;
这一点。accountOwnerSSN = accountOwnerSSN;
这一点。accountNumber = accountNumber;
这一点。平衡= initialBalance;
this.start (initialRate);
}

/ /启动方法将增加利益平衡每30天

/ /创建计时器对象和兴趣添加动作侦听器对象
公共空间开始(最终双率)
{

/ /匿名内部类实现ActionListener接口
ActionListener加法器= new ActionListener ()
{
公共空间actionPerformed (ActionEvent事件)
{

= BankAccount.this双重利益。平衡*率/ 100;
BankAccount.this。平衡+ =利息;
}
};

计时器t =新计时器(1000 * 3600 * 24 * 30,加法器);
t.start ();
}
}

示例4

在接下来的一个简单的Java例子applet提供了一个用户的能力在一个文本字段中输入一个URL,该URL在新的浏览器窗口中打开。小应用程序包含一个内部类,是一种行动提交按钮的侦听器,当用户单击submit按钮内部类动作监听器的actionPerformed方法将打开URL输入到文本字段在新的浏览器窗口中。与前面的例子以这种方式使用内部类创建一个安全风险暴露私有变量和方法。内部类创建一个额外的安全风险与applet applet在远程机器上执行通过web浏览器在同一个JVM并排,因此可能会与其他潜在的恶意代码。

(坏的代码)
公开课UrlToolApplet延伸Applet {

/ /私有成员变量为applet组件
私人标签enterUrlLabel;
私人TextField enterUrlTextField;
私人按钮submitButton;

/ /初始化方法,将组件添加到applet

/ /创建按钮的侦听器对象
公共空间init () {
setLayout(新FlowLayout ());
enterUrlLabel =新标签(“输入URL:”);
enterUrlTextField = new TextField (" ", 20);
submitButton = new按钮(“提交”);
添加(enterUrlLabel);
添加(enterUrlTextField);
添加(submitButton);
ActionListener submitButtonListener = new submitButtonListener ();
submitButton.addActionListener (submitButtonListener);
}

/ /按钮侦听器UrlToolApplet类的内部类
私人类SubmitButtonListener实现ActionListener {
公共空间actionPerformed (ActionEvent evt) {
如果(evt.getSource () = = submitButton) {
字符串urlString = enterUrlTextField.getText ();
网址URL =零;
尝试{
url = new url (urlString);
}捕捉(MalformedURLException e) {
System.err。println(“畸形的URL:“+ urlString);
}
如果(url ! = null) {
getAppletContext () .showDocument (url);
}
}
}
}
}

与前面的例子对这个问题的解决方案是使用一个静态的内部类,局部内部类或一个匿名内部类。另一种解决方案是使用applet实现动作监听器,而不是使用它作为一个内部类,如以下示例所示。

(好的代码)
例如语言:Java
公共类UrlToolApplet扩展Applet实现ActionListener {

/ /私有成员变量为applet组件
私人标签enterUrlLabel;
私人TextField enterUrlTextField;
私人按钮submitButton;

/ /初始化方法,将组件添加到applet
公共空间init () {
setLayout(新FlowLayout ());
enterUrlLabel =新标签(“输入URL:”);
enterUrlTextField = new TextField (" ", 20);
submitButton = new按钮(“提交”);
添加(enterUrlLabel);
添加(enterUrlTextField);
添加(submitButton);
submitButton.addActionListener(这个);
}

/ / actionPerformed方法ActionListener接口的实现
公共空间actionPerformed (ActionEvent evt) {
如果(evt.getSource () = = submitButton) {
字符串urlString = enterUrlTextField.getText ();
网址URL =零;
尝试{
url = new url (urlString);
}捕捉(MalformedURLException e) {
System.err。println(“畸形的URL:“+ urlString);
}
如果(url ! = null) {
getAppletContext () .showDocument (url);
}
}
}
}
+潜在的缓解措施

实施阶段:

使用密封类保护面向对象封装模式,因此保护代码被扩展以不可预见的方式。

实施阶段:

内部类不提供安全保障。警告:不要减少从外部类对象的安全,一个内部类。如果一个外部类最终或私人,确保其内部类是私有的。
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 485年 7 pk -封装
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 849年 CERT甲骨文安全Java编码标准(2011)第六章-面向对象(OBJ)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 966年 SFP二级集群:其他风险
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1139年 SEI CERT甲骨文安全编码标准Java - 05指导方针。面向对象(OBJ)
+笔记

其他

移动代码,在这种情况下,一个Java Applet,代码通过网络传播,并在远程机器上执行。因为移动代码开发人员几乎没有如果任何控制他们的代码将执行的环境,特殊的安全问题成为有关。一个最大的环境威胁的风险结果移动代码将与其他一起运行,潜在的恶意移动代码。因为所有流行的web浏览器执行代码来自多个源在相同的JVM中,许多移动代码安全指导方针的重点是防止操纵对象的状态和行为的对手获得相同的虚拟机,您的程序正在运行。
+分类法映射
映射分类名称 节点ID 适合 映射节点名
7有害的王国 移动代码:使用内部类
使用内部类时宣传的私人数据
CERT甲骨文安全Java编码标准(2011) OBJ08-J 不让外部类的私有成员在一个嵌套类
+引用
卡特里娜REF-6 Tsipenyuk,布莱恩象棋和加里·麦克格劳博士。“七有害的王国:分类软件安全错误”。NIST研讨会软件安全保障技术和度量工具。NIST的。2005-11-07。<https://samate.nist.gov/SSATTM_Content/papers/Seven%20Pernicious%20Kingdoms%20-%20Taxonomy%20of%20Sw%20Security%20Errors%20-%20Tsipenyuk%20-%20Chess%20-%20McGraw.pdf>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 7有害的王国
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-09-08 CWE内容团队 主教法冠
更新Common_Consequences、关系、Other_Notes Taxonomy_Mappings
2009-03-10 CWE内容团队 主教法冠
更新Demonstrative_Examples
2009-12-28 CWE内容团队 主教法冠
更新Demonstrative_Examples Potential_Mitigations
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences、关系、Taxonomy_Mappings
2012-05-11 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2014-06-23 CWE内容团队 主教法冠
更新描述,Other_Notes
2014-07-30 CWE内容团队 主教法冠
更新的关系
2019-01-03 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2020-02-24 CWE内容团队 主教法冠
更新描述、引用关系
2022-10-13 CWE内容团队 主教法冠
更新Demonstrative_Examples
+以前的条目名称
改变日期 以前的条目名称
2008-04-11 移动代码:使用内部类
更多的信息是可用的,请选择一个不同的过滤器。
页面最后更新:2023年1月31日