Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Empêcher l'injection SQL dans la clause ORDER BY

Si vous avez pour traiter des chaînes, alors la liste blanche est votre meilleur pari. Tout d'abord, sortDirection devrait être assez trivial pour la liste blanche :une comparaison insensible à la casse avec "asc" / "desc" et vous devriez être prêt. Pour les autres, ma préférence serait de mettre en liste blanche les colonnes connues , peut-être en transmettant le Type attendu pour les données et la validation. Mais à la rigueur, vous pouvez restreindre avec regex pour (disons) imposer qu'ils sont tous strictement alphanumérique (dans la plage a-z, A-Z, 0-9 - peut-être souligné si nécessaire) - puis ajoutez [] , c'est-à-dire

return string.Format("[{0}] {1}", sortColumn, sortDirection);

Mais :une liste blanche stricte des colonnes connues serait bien meilleure, tout comme une énumération pour la direction.