SV.UMC.JDBC

JDBC 2.0 API 中全新的 DataSource 接口提供了一种更好的连接到数据源的方式。应避免调用 DriverManager.getConnection(...)。

漏洞与风险

使用 JDBC 1.0,通过数据库管理器来获得和释放数据库连接,将影响应用程序的性能。该影响源于通过数据库资源管理器进程来创建和摧毁这些对象时产生的开销。

Klocwork 安全漏洞 (SV) 检查器可识别可能创建危险数据的调用;这些调用被视为不安全的来源。用户所提供的任何数据都可能是不安全的来源,因为用户可能是攻击者,或者可能引入人为错误。

缓解与预防

使用 DataSource 对象来连接数据源是更好的办法。

示例 1

复制
     protected void doPost(HttpServletRequest req,
                           HttpServletResponse resp) throws ServletException {
         String name = req.getParameter("userName");
         String pswd = req.getParameter("passwd");
         Connection conn = doGetConnection(name, pswd);
         // ...
     }
     private Connection doGetConnection(String name,
                                        String pswd) {
         Connection conn = null;
         try {
             return DriverManager.getConnection("localhost:3300",
                                                name, pswd);
         } catch (SQLException e) {
             // ...
         }
         return conn;
     }

针对第 29 行的调用报告 SV.UMC.JDBC:应用程序应避免直接调用 DriverManager.getConnection()。