cwe - 575: EJB坏实践:使用AWT摇摆
描述
产品违反Enterprise javabean (EJB)规范使用AWT / Swing。
扩展描述
Enterprise JavaBeans规范要求每一个bean提供者遵循一组编程指南,旨在确保bean将便携式和行为始终在任何EJB容器。在这种情况下,EJB产品违反下列指南:“一个企业bean必须不使用AWT试图输出信息显示功能,或从键盘输入信息”。The specification justifies this requirement in the following way: "Most servers do not allow direct interaction between an application program and a keyboard/display attached to the server system."
的关系
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示范例子
示例1
以下是一个简单的Java例子转换器类将美元转换成日元。这个转换器类演示了使用无状态会话的不当做法Enterprise JavaBean实现AWT组件和AWT键盘事件监听器来检索用户键盘输入的金额美元转换成日元。
@Stateless
公共类ConverterSessionBean扩展组件实现KeyListener ConverterSessionRemote {
/ *成员变量使用AWT API接收键盘输入* /
…
私人StringBuffer enteredText = new StringBuffer ();
/ *转化率美元日元* /
私人yenRate = new BigDecimal (" 115.3100 ");
公共ConverterSessionBean () {
超级();
/ *方法调用设置AWT组件接收键盘输入* /
… addKeyListener(这个);
}
公共BigDecimal dollarToYen (BigDecimal美元){
BigDecimal结果= dollars.multiply (yenRate); 返回的结果。BigDecimal.ROUND_DOWN setScale (2);
}
/ * * /成员函数实现AWT KeyListener接口
公共空间keyTyped (KeyEvent事件){
…
}
公共空间keyPressed (KeyEvent e) {
}
公共空间keyReleased (KeyEvent e) {
}
/ *成员函数接收键盘输入和显示输出* /
公共空间油漆(图形g) {…}
…
}
这种使用AWT和Swing api在任何类型的企业JavaBean不仅违反了EJB规范的限制与使用AWT和Swing在EJB,也违背了预期用途的Enterprise JavaBean分离业务逻辑和表现逻辑。
无状态会话企业JavaBean应该只包含业务逻辑。表示逻辑应该提供一些其他机制,如servlet或Java服务器页面(JSP)如以下Java / JSP示例。
@Stateless
公共类ConverterSessionBean实现ConverterSessionRemoteInterface {
/ *转化率美元日元* /
私人yenRate = new BigDecimal (" 115.3100 ");
公共ConverterSessionBean () {
}
/ *远程方法将美元转换成日元* /
公共BigDecimal dollarToYen (BigDecimal美元){
BigDecimal结果= dollars.multiply (yenRate); 返回的结果。BigDecimal.ROUND_DOWN setScale (2);
}
}
< % @ import = " converter.ejb页。转换器,java.math。*、javax.naming。* " % >
< % !
私人转换器转换器=零;
公共空间jspInit () {
尝试{
InitialContext ic = new InitialContext (); 转换器=(转换器)ic.lookup (Converter.class.getName ());
}捕捉(例外的前女友){
system . out。println(“不能创建bean转换器。”+ ex.getMessage ());
}
}
公共空间jspDestroy () {
转换器=零;
}
% >
< html >
<头> <标题>转换器< /名称> < / >头
<身体背景=“白色”>
<标题>转换器< / h1 >
<人力资源>
< p >输入转换金额:< / p >
<形式方法= "得到" >
< input type = " text " name = "数量"大小= " 25 " > < br > < p > < input type = " submit " value = "提交" > < input type = "重置" value = "重置" >
> < /形式
< %
字符串数量= request.getParameter(“金额”);
如果(金额! = null & & amount.length () > 0) {
d = new BigDecimal(数量); BigDecimal yenAmount = converter.dollarToYen (d);
% >
< p >
< % = % >数量美元< % = % > yenAmount日元。
< p >
< %
}
% >
< /身体>
< / html >
潜在的缓解措施
阶段:体系结构和设计
不要使用AWT / Swing在编写ejb。
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
分类法映射
映射分类名称
节点ID
适合
映射节点名
软件故障模式
SFP3
使用不当的API