文字列ベースの SQL クエリを使用する場合の SQL インジェクションから Java アプリケーションを保護する
SQL インジェクションの脆弱性は、Web アプリケーションのセキュリティに深刻な脅威をもたらします。 攻撃者は、悪意のある SQL コードをユーザー入力に挿入することでこれらの脆弱性を悪用し、アプリケーションのセキュリティ チェックを回避し、データベースの機密情報に不正にアクセスする可能性があります。
Java 文字列を使用して SQL クエリを構築する場合、SQL インジェクション攻撃を防ぐために特殊文字を適切にエスケープすることが不可欠です。 1 つの方法では、replaceAll
文字列関数を使用して、潜在的に有害な文字をエスケープされた対応する文字に置き換えます。
文字列エスケープ関数
次の関数は、バックスラッシュ ()、二重引用符 (
"
)、一重引用符 ('
)、および改行文字 (n
) をエスケープする方法を示しています。
public static String escapeForSql(String input) { return input.replaceAll("\\", "\\\\") .replaceAll("\"", "\\\"") .replaceAll("'", "\\'") .replaceAll("\n", "\\n"); }
推奨されるアプローチ: 準備されたステートメント
文字列のエスケープはある程度の保護を提供しますが、推奨されるベスト プラクティスは PreparedStatement を使用することです。 PreparedStatement はパラメータ化されたクエリ メカニズムを提供し、ユーザーが指定した入力が SQL コードとして直接実行されることを効果的に防ぎます。PreparedStatements を使用すると、パラメーターが SQL クエリ内のプレースホルダーにバインドされ、ユーザー入力によってクエリの構造や実行フローが変更されないようになります。 これにより、手動でエスケープする必要がなくなります:
PreparedStatement statement = connection.prepareStatement("INSERT INTO users (username, password) VALUES (?, ?)"); statement.setString(1, username); statement.setString(2, password); statement.executeUpdate();
以上がJava 文字列を使用して SQL クエリを構築するときに SQL インジェクションを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。