ホームページ >データベース >mysql チュートリアル >JDBC PreparedStatement にパラメータを安全に渡すにはどうすればよいですか?

JDBC PreparedStatement にパラメータを安全に渡すにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-20 02:04:17742ブラウズ

How to Securely Pass Parameters to a JDBC PreparedStatement?

JDBC PreparedStatement へのパラメータの受け渡し

JDBC では、プリペアド ステートメントを使用して、ステートメントを 1 回コンパイルし、SQL ステートメントを効率的かつ安全に実行します。異なるパラメーターを使用して複数回実行します。プリペアド ステートメントにパラメータを渡す場合、SQL インジェクション攻撃やステートメントのフォーマット エラーを防ぐためにパラメータが正しく設定されていることを確認することが重要です。

問題の説明

提供されたコードValidation クラス コンストラクターに渡された userID パラメーターに基づいてデータベース テーブルから行を選択しようとします。ただし、ステートメントにはパラメータ化が欠けているため、不正な実行と潜在的な SQL インジェクションの脆弱性が発生します。

解決策

userID パラメータを正しく渡すには、setString() メソッドを使用します。クエリパラメータの値を設定します。これにより、ステートメントが適切にフォーマットされ、SQL インジェクション攻撃から保護されることが保証されます。

statement = con.prepareStatement("SELECT * FROM employee WHERE userID = ?");
statement.setString(1, userID);

このアプローチに従うと、指定されたコードは、指定された userID パラメーターに基づいてデータベース テーブルから行を正しく選択します。

ベスト プラクティス

  • SQL インジェクション攻撃を防止し、コードのセキュリティを向上させるために、常に準備されたステートメントをパラメータ化とともに使用してください。
  • 適切なデータ型固有のデータを使用してください。 setXXX() メソッドを使用してパラメータ値を設定します (setString()、setInt() など)。
  • アプリケーションが SQL インジェクションに対して脆弱になるため、ユーザー入力を SQL ステートメントに連結しないでください。

以上がJDBC PreparedStatement にパラメータを安全に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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