0

私の Java プログラムには、次のコード行が表示されます。

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

GUI を介して大都市、大陸、人口を入力できますが、大都市 = a、大陸 = b、人口を入力すると機能しないようです。2; DROP TABLE tablename;

助言がありますか?SQL インジェクションをよりよく理解できるように、metropolises という名前のテーブルを削除しようとしています。

4

2 に答える 2

1

使用しているデータベースのブランドを指定しません (「sql」タグが Microsoft SQL Server を意味する場合を除きます)。MySQLに関する私の経験は次のとおりです。

デフォルトでは、MySQL JDBC ドライバーは呼び出しごとに 1 つの SQL ステートメントのみを実行します。これは、ある種の SQL インジェクションを防御するための良いアイデアです。

allowMultiQueriesJDBC ドライバーには、セミコロンで区切られたステートメントを許可するために設定する必要があるオプションの接続プロパティがあります。http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-configuration-properties.htmlを参照してください。

于 2013-02-09T23:27:19.490 に答える
1

一部のデータベース ライブラリでは、呼び出しごとに複数のクエリを実行できません (たとえば、PHP の mysql バインダー)。それらでは、この種の注射は不可能です。残念ながら、これが JDBC に当てはまるかどうかはわかりませんが、それが理由かもしれません。

于 2013-02-07T11:55:21.267 に答える