给出以下功能:
public void foo(Connection conn)
{
PreparedStatement statement = conn.prepareStatement("Select a from table");
statement.execute();
}
使用在其他地方实例化的Connection
对象(无论是外部应用程序还是内部应用程序无关紧要)。通过允许应用程序的API中的函数接受未经验证的Connection
,是否会出现任何安全问题?例如,未经验证的连接是否会欺骗我的应用程序运行恶意查询?
答案 0 :(得分:1)
是的,Connection
对象可能会运行恶意查询。
而且:不,我不知道如何防止这种情况,因为执行查询的代码需要Connection
(或DataSource
)。
使用某种类型的例如用于连接池。从连接池中获取Connection
对象,例如open()
和close()
方法无法按预期工作(因为池需要在需要时关闭连接)。因此,连接池也可以覆盖其他方法(因为Connection
只是一个接口)。
答案 1 :(得分:1)
如果你考虑一下,无论注入什么,Connection对象都已经有了对连接对象的引用。无论是否有您的代码,它都可以自行运行恶意查询。