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

时间:2013-07-30 12:32:05

标签: java sql security

给出以下功能:

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

使用在其他地方实例化的Connection对象(无论是外部应用程序还是内部应用程序无关紧要)。通过允许应用程序的API中的函数接受未经验证的Connection,是否会出现任何安全问题?例如,未经验证的连接是否会欺骗我的应用程序运行恶意查询?

2 个答案:

答案 0 :(得分:1)

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

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

使用某种类型的例如用于连接池。从连接池中获取Connection对象,例如open()close()方法无法按预期工作(因为池需要在需要时关闭连接)。因此,连接池也可以覆盖其他方法(因为Connection只是一个接口)。

答案 1 :(得分:1)

如果你考虑一下,无论注入什么,Connection对象都已经有了对连接对象的引用。无论是否有您的代码,它都可以自行运行恶意查询。