我如何SQL注入使用JDBC的Java语句?

时间:2013-02-07 11:46:34

标签: sql jdbc sql-injection

以下代码行出现在我的Java程序中:

stmt.executeQuery("SELECT * FROM metropolises WHERE metropolis =\"" + metropolis + "\" AND continent=\"" + continent + "\" AND population>" + population);

我可以通过GUI为大都市,大陆和人口投入任何东西,但是如果我把metropolis = a,continent = b放在一起,我似乎无法工作。人口是2; DROP TABLE tablename;

有什么建议吗?我正在尝试DROP一个名为metropolises的表,这样我就能更好地理解SQL注入。

2 个答案:

答案 0 :(得分:1)

某些数据库库不允许每次调用执行多个查询(例如PHP的mysql绑定器)。在那些,这种注射是不可能的。不幸的是,我不知道JDBC是否属实,但可能是原因。

答案 1 :(得分:1)

您没有指定您正在使用的数据库品牌(除非“sql”标签暗示Microsoft SQL Server)。所以这是我的经历w.r.t. MySQL的:

默认情况下,MySQL JDBC驱动程序每次调用只执行一个SQL语句。这是防御某些类型的SQL注入的好主意。

JDBC驱动程序具有可选的连接属性allowMultiQueries,您必须将其设置为允许以分号分隔的语句。见http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-configuration-properties.html