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 ?

Comment puis-je implémenter des clauses ORDER BY dynamiques dans Go avec MySQL pour empêcher l'injection SQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-29 05:01:11307parcourir

How Can I Implement Dynamic ORDER BY Clauses in Go with MySQL to Prevent SQL Injection?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn