有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

将Java连接传递给多个公共函数的sql安全问题

鉴于以下功能:

public void foo(Connection conn)  
{  
    PreparedStatement statement = conn.prepareStatement("Select a from table");  
    statement.execute();
}  

使用在别处实例化的Connection对象(应用程序的外部或内部都不重要)。允许应用程序的API中的函数接受未经验证的Connection,是否会出现任何安全问题?例如,未经验证的连接能否诱使我的应用程序运行恶意查询


共 (2) 个答案

  1. # 1 楼答案

    是的,Connection对象可能会运行恶意查询

    而且:不,我不知道如何防止这种情况,因为执行查询的代码需要Connection(或DataSource

    某些类型的连接池就是这样使用的。从连接池中可以得到一个Connection对象,其中open()close()方法不能按预期工作(因为池希望在需要时关闭连接)。因此,连接池也可以覆盖其他方法(因为Connection只是一个接口)

  2. # 2 楼答案

    仔细想想,注入该连接对象的任何东西都已经有了对该连接对象的引用。无论是否使用您的代码,它都可以自行运行恶意查询