0

次のようなクエリを持つjspコードがあります

'select * from MyTable where

Column1='+request.getParameter('q'),

から実行されます

java.sql.Statement. ここで、次を使用してクエリを追加できれば、

リクエストパラメータ、私の目標はクエリを次のように変更することです:

Select * from MyTable where Column1 = a; Delete from MyTable;

元の選択クエリは java.sql.Statement を介して実行されるため、

どうすればそのようなSQLインジェクションを行うことができますか? 質問が明確でない場合は、親切に

コメント、私はさらに説明を提供しようとします。

4

3 に答える 3

2

SQL インジェクション ガイド: Link1 & Link2ですが、Stackoverflow にはQ & A のような SQL インジェクションに関する関連スレッドが非常に多くあります。

1つのことをして、検索-> SQLインジェクションJavaスタックオーバーフロー

于 2012-08-17T07:20:53.107 に答える
1

q を a として注入anything' OR 'x'='xすると、脆弱な可能性があるすべての列が選択されます。準備されたステートメントに引数として渡される変数は、JDBC ドライバーによって自動的にエスケープされるためです。

プリペアド ステートメントは SQL インジェクションに対する防御に役立ちますが、プリペアド ステートメントの不適切な使用による SQL インジェクション攻撃の可能性があります。以下の例は、入力変数が直接プリペアド ステートメントに渡され、それによって SQL インジェクション攻撃への道を開くシナリオを説明しています。

于 2012-08-17T06:59:20.597 に答える
0

SQL インジェクションに関して と 、および がどのように動作するかについて説明しているこの記事を参照してください。StatementPreparedStatementexecuteQuery()executeUpdate()

DROP古典的なテーブルとは別に、次のような注意すべきシナリオがあります。

  • スリープ機能を呼び出して、すべてのデータベース接続がビジーになり、アプリケーションが使用できなくなる
  • DB からの機密データの抽出
  • ユーザー認証をバイパスする

また、影響を受ける可能性があるのは SQL だけではありません。バインド パラメータを使用していない場合は、JPQL でさえ危険にさらされる可能性があります。

結論として、SQL ステートメントを作成するときは、文字列連結を使用しないでください。その目的のために専用の API を使用します。

于 2016-11-08T15:05:46.330 に答える