Sans afficher votre code de procédure stockée, il n'y a aucun moyen de vraiment répondre à votre question, mais vous pouvez probablement y répondre vous-même.
Les attaques par injection SQL proviennent de données saisies par l'utilisateur qui se glissent dans des requêtes SQL générées et exécutées de manière dynamique. L'utilisation d'une procédure stockée permet généralement d'éviter ce problème, car elle transmet les arguments en tant que paramètres et ne génère donc pas de SQL de manière dynamique. Les procédures sont automatiquement encapsulées et ne font pas partie du texte original de votre requête SQL.
Prenons l'exemple suivant :
SELECT *
FROM myTable
WHERE myId = @ID;
En tant que paramètre, vous êtes sûr de mettre @ID
en "21 ; DROP TABLE myTable ;". Il sera échappé pour vous et la chaîne entière sera comparée à myId. Toutefois, si vous générez dynamiquement votre requête SQL comme suit
string query = "SELECT *\nFROM myTable\nWHERE myId = " + userEnteredText + ";";
Vous obtiendrez alors ce qui suit :
SELECT *
FROM myTable
WHERE myId = 21; DROP TABLE myTable;;
Aïe.
Donc, pour répondre à votre question : SI votre procédure stockée ne génère pas dynamiquement du SQL basé sur ses paramètres et EXEC
ils, vous devriez être en sécurité.
Remarque : cela dépend bien sûr du fait que votre fournisseur de données .NET appelle la procédure avec des paramètres et ne génère pas d'instructions SQL dynamiques. La plupart d'entre eux le font correctement, mais si vous utilisez un fournisseur tiers, vous devez le vérifier avant de penser que vous êtes en sécurité.