| 
       cwe - 537: Java运行时包含敏感信息的错误消息 
       
       
       
        
          描述 
         
          
           在许多情况下,攻击者可以利用的条件,导致未处理的异常错误系统为了获得未经授权的访问。 
        
          的关系 
        
          模式的介绍 
         
          
            不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。 
        
          常见的后果 
         
          
            这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。 
        
          示范例子 
         
          
           示例1 在接下来的Java示例类InputFileRead允许将一个输入文件使用FileReader对象读取。这个类的构造函数中一个默认的输入文件路径设置为本地文件系统上的一些目录和方法setInputFile必须调用设置读取输入文件的名称在默认目录。readInputFile方法将创建FileReader对象和读取文件的内容。如果方法setInputFile之前不是叫readInputFile然后文件对象调用方法初始化FileReader对象时仍将是零。将会引发一个Java RuntimeException,错误消息将输出给用户。 
            
             
              
              
               
                公开课InputFileRead { 
                 
                  私人文件readFile =零; 私人FileReader读者=零; 私人字符串inputFilePath =零; 私人最终字符串DEFAULT_FILE_PATH = " c: \ \ somedirectory \ \ ";
                   公共InputFileRead () { 
                   inputFilePath = DEFAULT_FILE_PATH; }
                   公共空间setInputFile(字符串inputFile) { 
                   
                    / *假定适当的验证/使用编码和特权/权限保存* /
 
 }
                   公共空间readInputFile () { 
                   
                    尝试{ 
                     读者= new FileReader (readFile);…
 }捕捉(RuntimeException雷克斯){ 
                     System.err。println(“错误:无法打开输入文件目录”+ inputFilePath);System.err。println(“输入文件没有设置,叫setInputFile方法之前调用readInputFile”);
 }捕捉(FileNotFoundException ex) {…}
                    } } 然而,错误消息输出到用户包含在默认目录信息在本地文件系统中。可以利用这一信息,可能导致系统的未经授权的访问或使用。任何Java runtimeexception,处理不应暴露敏感信息给用户。 示例2 在下面的示例中,BankManagerLoginServlet servlet类将处理一个登录请求来确定用户是否被授权使用BankManager Web服务。doPost方法将从servlet请求和检索用户名和密码判断用户是否被授权。如果用户被授权servlet将成功的登录页面。否则,servlet将提高FailedLoginException和输出失败的登录消息服务的错误页面。 
            
             
              
              
               
                公开课BankManagerLoginServlet扩展HttpServlet { 
                 
                  保护无效doPost (HttpServletRequest请求,HttpServletResponse响应)抛出ServletException IOException { 
                   
                    尝试{ 
                     
                      
                      / /得到用户名和密码登录页面请求
                      字符串的用户名= request.getParameter(“用户名”); 字符串密码= request.getParameter(“密码”);
                      / /验证用户 BankManager bankMgr = new BankManager (); 布尔isAuthentic = bankMgr。authenticateUser(用户名、密码);
                      / /如果用户身份验证,那么去成功的登录页面 如果(isAuthentic) { 
                       请求。setAttribute(“登录”,新的字符串(“登录成功”。));getServletContext () .getRequestDispatcher (“/ BankManagerServiceLoggedIn.jsp”)。提出(请求、响应);
 } 其他{ 
                       
                        / /否则,引发失败的登录异常和输出不成功的登录信息错误页面
 把新FailedLoginException(“失败的登录用户”+用户名+“密码”+密码);
 } }捕捉(FailedLoginException ex) { 
                     
                      / /输出失败的登录信息错误页面
 请求。setAttribute(“错误”,新的字符串(“登录错误”));
 请求。setAttribute(“消息”,ex.getMessage ());
 getServletContext () .getRequestDispatcher (“/ ErrorPage.jsp”)。提出(请求、响应);
 } } 然而,生成的输出消息FailedLoginException包括用户提供的密码。即使密码是错误的,它可能是接近正确的密码。因为它是打印到用户的页面,谁可以看到屏幕显示就可以看到密码。同样,如果页面缓存,密码可能会被写入磁盘。 
        
          潜在的缓解措施 
        
          会员资格 
         
          
            这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。 |