ホームページ >データベース >mysql チュートリアル >Java 文字列を使用して SQL クエリを構築するときに SQL インジェクションを防ぐにはどうすればよいですか?

Java 文字列を使用して SQL クエリを構築するときに SQL インジェクションを防ぐにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-21 14:16:141026ブラウズ

"How

文字列ベースの SQL クエリを使用する場合の SQL インジェクションから Java アプリケーションを保護する

SQL インジェクションの脆弱性は、Web アプリケーションのセキュリティに深刻な脅威をもたらします。 攻撃者は、悪意のある SQL コードをユーザー入力に挿入することでこれらの脆弱性を悪用し、アプリケーションのセキュリティ チェックを回避し、データベースの機密情報に不正にアクセスする可能性があります。

Java 文字列を使用して SQL クエリを構築する場合、SQL インジェクション攻撃を防ぐために特殊文字を適切にエスケープすることが不可欠です。 1 つの方法では、replaceAll 文字列関数を使用して、潜在的に有害な文字をエスケープされた対応する文字に置き換えます。

文字列エスケープ関数

次の関数は、バックスラッシュ ()、二重引用符 (")、一重引用符 (')、および改行文字 (n) をエスケープする方法を示しています。

<code class="language-java">public static String escapeForSql(String input) {
    return input.replaceAll("\\", "\\\\")
            .replaceAll("\"", "\\\"")
            .replaceAll("'", "\\'")
            .replaceAll("\n", "\\n");
}</code>
この関数は、SQL クエリに組み込まれる前にユーザー指定の入力をサニタイズするために使用する必要があり、SQL インジェクションのリスクを大幅に軽減します。

推奨されるアプローチ: 準備されたステートメント

文字列のエスケープはある程度の保護を提供しますが、推奨されるベスト プラクティスは PreparedStatement を使用することです。 PreparedStatement はパラメータ化されたクエリ メカニズムを提供し、ユーザーが指定した入力が SQL コードとして直接実行されることを効果的に防ぎます。

PreparedStatements を使用すると、パラメーターが SQL クエリ内のプレースホルダーにバインドされ、ユーザー入力によってクエリの構造や実行フローが変更されないようになります。 これにより、手動でエスケープする必要がなくなります:

<code class="language-java">PreparedStatement statement = connection.prepareStatement("INSERT INTO users (username, password) VALUES (?, ?)");
statement.setString(1, username);
statement.setString(2, password);
statement.executeUpdate();</code>
PreparedStatement はエスケープ処理を自動的に処理することで優れたセキュリティを提供し、Java での安全なデータベース操作に推奨される方法です。

以上がJava 文字列を使用して SQL クエリを構築するときに SQL インジェクションを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。