Maison >développement back-end >Golang >Comment puis-je implémenter des clauses ORDER BY dynamiques dans Go avec MySQL pour empêcher l'injection SQL ?
ORDER BY dynamique dans Golang avec MySql
Problème :
Difficulté à trier dynamiquement les requêtes résultats en utilisant db.Select() avec espaces réservés.
Analyse :
Contrairement aux paramètres de filtre, les espaces réservés (?) ne peuvent pas être utilisés pour les mots-clés ou identifiants SQL, y compris la clause ORDER BY.
Résolution :
Pour obtenir un ordre dynamique, on peut employer fmt.Sprintf() pour assembler dynamiquement le texte de la requête. Par exemple :
ordCol := "title" qtext := fmt.Sprintf("SELECT * FROM Apps ORDER BY %s DESC", ordCol) rows, err := db.Query(qtext)
Précautions :
Lors de l'assemblage dynamique de requêtes, il est crucial de mettre en œuvre des protections contre l'injection SQL. Cela implique de s'assurer que les valeurs utilisées pour les noms de colonnes respectent des critères spécifiques, tels que l'autorisation uniquement des lettres, chiffres et traits de soulignement anglais :
valid := regexp.MustCompile("^[A-Za-z0-9_]+$") if !valid.MatchString(ordCol) { // Invalid column name, prevent SQL injection }
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!