SQL インジェクション ( SQLi )

Mar 12 2023
こんにちは。時間を割いてこの記事を読んでいただきありがとうございます。それは有り難いです!今日の内容は「SQL インジェクション」の理解に関するものです。この内容は完全に私の個人的な経験と知識、App Sec およびソフトウェア開発分野の素晴らしい人々との交流、そして大量の読書と安全なコーディングに基づいています。この記事では、基本的な内容を簡略化して説明します。
一緒に学びましょう | SQLインジェクション

こんにちは、

時間を割いてこの記事を読んでいただきありがとうございます。それは有り難いです!

今日の内容は「SQLインジェクション」についてです。

このコンテンツは完全に私の個人的な経験と知識、App Sec およびソフトウェア開発分野の素晴らしい人々との交流、そして大量の読書と安全なコーディングに基づいています。

この記事では、基本的な内容を簡略化して説明します。読者の皆さんもそれぞれの考えやコメントがあると思いますが、フィードバックや議論を歓迎します。

見解、コメント、意見は私自身のものであり、私の過去/現在の雇用主のものではありません。

一緒に学びましょう!

SQLインジェクションとは何ですか?

アプリケーション セキュリティ攻撃の一種。悪意のある攻撃者がデータベース内のデータにアクセスして操作するために、脆弱な入力フィールドに悪意のある SQL コードを挿入します。SQLi を使用すると、攻撃者はデータベース内のデータを表示、変更、削除できます。

SQLiを修正するにはどうすればよいですか?

SQL クエリと入力値を連結しないでください。

常に入力検証を実行し (私の個人的な意見ですが、これにより多くの悪意のある署名が実際に阻止されます)、次に SQLi を修正するための以下の戦略の 1 つに従います。

  1. パラメータ化されたクエリ:入力値をパラメータとして SQL ステートメントに渡します。これは、パラメータ化されたクエリを使用して実現されます。これにより、悪意のある入力が SQL コードとして実行されるのを防ぎます。
  2. ストアド プロシージャ:コード内に SQL SQL クエリを含めず、ストアド プロシージャ経由で DB に移動する方がはるかに優れています。

パラメータ化されたクエリ:

以下のコード サンプルでは、​​名前とパスが 'setString()' を介して SQL ステートメントにパラメータとして渡されます。PreparedStatementのメソッドです。

....
// simple basic example
// assume name and pass are obtained from some input
// conn is the connection
String sqlStatement = "SELECT * FROM userdetails WHERE name = ? AND pass = ?";
PreparedStatement stmt = conn.prepareStatement(sqlStatement);
stmt.setString(1, name);
stmt.setString(2, pass);
ResultSet rs = stmt.executeQuery();
// carry on with your logic
....

以下のコード サンプルでは、​​「name」と「location」がパラメータとして「setString()」を介してストアド プロシージャ「userDetails」に渡されます。CallableStatementのメソッドです。出力は、「registerOutParameter」を使用するパラメータ「output」を介して受信されます。CallableStatement の別のメソッドです。

....
// simple basic example
// Assume name and location are obtained from some input
// conn is the connection
CallableStatement stmt = conn.prepareCall("{ call userdetails(?,?,?) }");
stmt.setString(1, name);
stmt.setString(2, location);
stmt.registerOutParameter(3, java.sql.Types.INTEGER);
stmt.execute();
int output = stmt.getInt(3);
// carry on with your logic...
....

私は常にコンテンツを改善し、より良くすることを目指しているため、コメント/フィードバックはいつでも歓迎されます。

出典の記事: App Sec における私自身の経験。複数のオンライン Web サイト、Open AI、DALL-E、開発者ツール、および NLP ツールの内容を言い換えています。

ありがとう!

LinkedInに私を追加してください