L'insertion en DB avec les paramètres de sécurité contre l'injection SQL?
J'ai lu un peu sur l'injection SQL et je veux être sûr que mon code est permet de dire "coffre-fort" de cela, j'ai été l'intention de l'utiliser RegExp validateurs pour vérifier la saisie de l'utilisateur, mais un autre post ici suggéré seulement paramétrées à l'aide de requêtes sur, eh bien, je suis avec eux, mais je veux être sûr que mon code est sûr, est-il?
using ( SqlConnection dataConnection = new SqlConnection(myConnectionString) )
{
using ( SqlCommand dataCommand = dataConnection.CreateCommand() )
{
dataCommand.CommandText = "INSERT INTO Lines (Name, CreationTime) " +
"VALUES (@LineName, @CurrentDateTime)";
dataCommand.Parameters.AddWithValue("@LineName", TextBox2.Text);
dataCommand.Parameters.AddWithValue("@CurrentDateTime", DateTime.Now.ToString());
dataConnection.Open();
//do other DB stuff
Je coupe la dernière partie pour rendre le post plus court, le reste est juste d'essayer et attraper les exceptions et fermeture de connexion db ainsi que de fournir de la rétroaction des utilisateurs sur l'insertion réussie.
Si le
CreationTime
colonne est de type DateTime
, vous n'avez pas besoin de la .ToString()
exprimés.OriginalL'auteur Termiux | 2011-03-15
Vous devez vous connecter pour publier un commentaire.
Votre code est correct, il est protégé de l'injection car les valeurs sont transmises comme paramètres non littéraux de chaîne. Toutefois, si vous êtes à la rédaction de ce type d'accès aux données vous-même, avez-vous envisagé la création d' SqlParameter objets et de définir explicitement le type, la taille, etc, et en ajoutant les paramètres à la commande? AddWithValue fonctionnent très bien, mais SQL Server doivent déterminer le type, un peu, mais une surcharge inutile.
Une Regex programme de validation de la saisie de l'utilisateur qui seront transmises comme paramètres?
OriginalL'auteur kd7
Eh bien, vous pourriez toujours essayer d'injecter une instruction SQL dans la zone de texte, qui sera probablement vous donner un rapide, de réponse définitive.
OriginalL'auteur Andy Wiesendanger
Oui, c'est raisonnable. Tant que vous n'utilisez pas "aseptisé", les variables à partir d'une instruction préparée pour générer le sql dynamique plus tard, vous êtes généralement ok. Le fait que vous êtes à l'aide d'une requête préparée prendra soin de traiter avec des caractères d'échappement et d'autres méthodes simples de l'injection.
Je n'aurais pas à renoncer à toute autre validation...
Ce type de saisie que vous attendez-vous à recevoir? Vérifiez tout ce qui n'a pas de sens. Je suis un grand fan de côté client ET côté serveur de validation PUIS en utilisant paramétrée/les requêtes préparées. Si rien d'autre, j'aimerais voir quand les gens essaient de me donner des ordures, même si c'est peu probable qu'ils vont avoir du succès.
OriginalL'auteur Pete M