0

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

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

a我可以通过 GUI 为大都市、大陆和人口输入任何内容,但如果我输入大都会 = 、大陆 =b和人口,我似乎无法让它工作2; DROP TABLE tablename;

有什么建议么?我正在尝试删除一个名为 metropolises 的表,以便更好地理解 SQL 注入。

4

2 回答 2

1

一些数据库库不允许每次调用执行多个查询(例如 PHP 的 mysql binder)。在那些情况下,这种注射是不可能的。不幸的是,我不知道这是否适用于 JDBC,但这可能是原因。

于 2013-02-07T11:55:21.267 回答
1

您无需指定您使用的数据库品牌(除非“sql”标签暗示 Microsoft SQL Server)。所以这是我对 MySQL 的经验:

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

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

于 2013-02-09T23:27:19.490 回答