Maison >Java >javaDidacticiel >Les instructions préparées en Java peuvent-elles gérer les noms de colonnes variables en toute sécurité dans MySQL ?
Noms de colonnes variables à l'aide d'instructions préparées
Problème :
Les noms de colonnes variables peuvent-ils être spécifiés lors de l'utilisation d'instructions préparées dans MySQL en utilisant Java pour empêcher l'injection SQL vulnérabilités ?
Explication :
Les instructions préparées sont conçues pour protéger contre l'injection SQL en séparant les paramètres de requête de l'instruction de requête principale. Lorsque vous tentez d'utiliser des instructions préparées, les noms de colonnes ne sont pas reconnus en tant que paramètres et sont plutôt interpolés dans la requête en tant que valeurs littérales. Cela peut entraîner des problèmes de sécurité si les noms de colonnes fournis ne sont pas correctement nettoyés.
Solution :
// 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");
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!