準備済みステートメントを使用した変数列名
問題:
変数列名を指定できますかSQL インジェクションを防ぐために Java を使用して MySQL でプリペアド ステートメントを使用する場合脆弱性?
説明:
プリペアド ステートメントは、クエリ パラメータをメインのクエリ ステートメントから分離することで SQL インジェクションから保護するように設計されています。準備されたステートメントを使用しようとすると、列名はパラメーターとして認識されず、代わりにリテラル値としてクエリに挿入されます。指定された列名が適切にサニタイズされていない場合、セキュリティの問題が発生する可能性があります。
解決策:
// Sanitize the user-provided column names String sanitizedColumns = columnNames.replace("'", "\'"); // Build the SQL query string String query = "SELECT a,b,c,ROW_NUMBER() OVER(), " + sanitizedColumns + " FROM " + name + " WHERE d=?"; // Prepare the statement stmt = conn.prepareStatement(query); stmt.setString(1, "x");
以上がJava のプリペアド ステートメントは MySQL で変数カラム名を安全に処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。