Protéger vos requêtes SQL à l’aide des requêtes paramétrées.

30. September 2010 by Mustapha.AMALLAHI

Introduction

Lorsque vous travaillez avec des données, vous aurez souvent besoin de filtrer les résultats en fonction de certains critères. Typiquement, cela se fait en acceptant la saisie d'un utilisateur et en utilisant cette entrée pour former une requête SQL. Par exemple, une personne pourrai avoir de voir toutes les commandes entre des dates spécifiques.

Une autre requête pourrait être simplement de récupérer des champs suivant l’ID d’un enregistrement.


Comme vous le savez, la requête SQL assignée à un objet SqlCommand est simplement une chaîne.

Donc, si vous souhaitez filtrer une requête, vous pouvez créer la chaîne dynamique, mais cela est risqué car la requête n’est pas protégée.

 

Voici un mauvais exemple de filtrage d'une requête.

Ne jamais créer une requête de cette façon! La variable d'entrée,  idTable, est généralement récupérée à partir d'un contrôle TextBox soit sur un formulaire Windows ou une page Web. Tout ce qui est placé dans le contrôle TextBox sera mis en idTable et ajouté à votre chaîne SQL. Cette situation peut inciter un pirate à remplacer cette chaîne par un code malveillant.


Au lieu de construire dynamiquement une chaîne, comme le montre le mauvais exemple ci-dessus, utilisez les requêtes paramétrées.

Tout ce qui est placé dans un paramètre sera traité et ne fait pas partie de l'instruction SQL, ce qui rend votre application beaucoup plus sûre.

L'utilisation de requêtes paramétrées est un processus en trois étapes:

   1. Construire la chaîne de commande SqlCommand avec des paramètres.
   2. Déclarez un objet SqlParameter en lui attribuant une valeurs.
   3. Assignez l'objet SqlParameter à la propriété de l'objet SqlCommand.

Les sections suivantes vous guident étape par étape à travers ce processus.

 

La préparation d'un objet SqlCommand pour les paramètres

La première étape dans l'utilisation de paramètres dans les requêtes SQL est de construire une chaîne de commande contenant des espaces réservés de paramètres. Ces espaces réservés sont remplis avec des valeurs de paramètre réel quand la SqlCommand est exécuté.

La syntaxe correcte d'un paramètre est d'utiliser un préfixe symbole "@" sur le nom du paramètre comme indiqué ci-dessous:

 

Dans le constructeur de SqlCommand ci-dessus, le premier argument contient une déclaration de paramètre, @id. Cet exemple utilise un paramètre, mais vous pouvez avoir autant de paramètres que nécessaire pour personnaliser la requête. Chaque paramètre correspondant à un objet SqlParameter qui doit être affectés à cet objet SqlCommand.

 

Déclarer un objet SqlParameter

Chaque paramètre dans une instruction SQL doit être défini. Tel est l'objet du type SqlParameter. Votre code doit définir une instance de SqlParameter pour chaque paramètre de commande d'un objet SqlCommand de SQL. Le code suivant définit un paramètre pour le paramètre @id de la section précédente:

 

Notez que la propriété ParameterName de l'instance SqlParameter doit être écrite  exactement comme le paramètre qui est utilisé dans la chaîne de commande SQL SqlCommand. Vous devez également spécifier une valeur pour la commande. Lorsque l'objet SqlCommand s'exécute, le paramètre sera remplacé par cette valeur.

 

Associer un objet SqlParameter avec un objet SqlCommand



Pour chaque paramètre défini dans la chaîne de commande de l’objet SqlCommand, vous devez définir un SqlParameter.

Vous devez également ajouter à l'objet SqlCommand tous les SqlParameter en attribuant l'instance SqlParameter à la propriété Parameters de l'objet SqlCommand.

 Le code suivant montre comment faire:


L'instance SqlParameter est l'argument de la méthode Add de la propriété Parameters de l'objet SqlCommand ci-dessus.

Vous devez ajouter un unique SqlParameter pour chaque paramètre défini dans la chaîne de l'objet SqlCommand de commande SQL.

 

On met tout ensemble.


Résumé :


Vous devez utiliser des paramètres pour filtrer les requêtes d'une manière sûre, un très bon moyen pour éviter les injections SQL.

Le processus de d’utilisation du paramètre comporte trois étapes:

-définir le paramètre dans la chaîne de commande SqlCommand.

-déclarer l'objet SqlParameter avec des propriétés applicables.

-Affecter l'objet SqlParameter à l'objet SqlCommand.

Lorsque le SqlCommand est exécuté, les paramètres seront remplacés par les valeurs spécifiées par l'objet SqlParameter.

 

Voilà vous savez tout sur les requêtes paramétrés ! Écouter

Lire phonétiquement

 

ADO.NET, C# , , , ,

Mode offline de vos applications sous Silverlight

25. September 2010 by Mustapha.AMALLAHI

 

Une des nouveautés parmi les nombreuses disponibles dans  Silverlight 3 & 4 est la possibilité de créer des applications utilisable hors-navigateur (out-of-browser), peut-être un nouveau concurrent pour Adobe-Air.

Pour mettre en place cet outil, rien de plus simple et  en seulement quelques clic, pour ce faire suivez les instructions ci-dessous :

1-Mise en place du mode Offline.

Commencez par faire un clic droit sur votre projet puis cliquez sur propriété (Properties)

 

http://www.labo-dotnet.com/image.axd?picture=2010%2f7%2f0.jpg

 

Une fenêtre s’ouvre cochez la case « Enable running application out of the browser »

Puis cliquez sur le bouton  « Out-of-browser Settings ... »

 

http://www.labo-dotnet.com/image.axd?picture=2010%2f7%2f1.jpg

 

Une nouvelle fenêtre s’ouvre, cette fois nous allons renseigner le titre, une description, la taille de la fenêtre de l’application offline ainsi que les différentes icônes de différentes tailles qui nous permettront de personnaliser notre application offline.

 

http://www.labo-dotnet.com/image.axd?picture=2010%2f7%2f2.jpg

 

On finit par cliquer sur OK puis on exécute l’application.

 

2) Installation de l’application :

Pour installer l’application il existe 2 façons différentes, en faisant un simple clic droit puis cliquer sur « Installer "le nom de votre application" sur cet ordinateur… »

 

 

http://www.labo-dotnet.com/image.axd?picture=2010%2f7%2fzzzz.png

 

Ou bien en créant un bouton et en ajoutant cette ligne au clic « Application.Current.Install() ; »

Une fois la méthode choisi, cochez les 2 cases « Menu démarrer » et/ou « Bureau » pour que l’application puisse créer des raccourcis dans les endroits spécifiés.

 

 

 

http://www.labo-dotnet.com/image.axd?picture=2010%2f7%2f4.jpg

Finalement nous obtenons la même application en mode offline, avec la taille et titre spécifié, vous pouvez aussi remarquer que toutes les icônes que nous avons ajoutés précédemment ont été utilisées à différentes étapes de l’installation de l’application.

 

http://www.labo-dotnet.com/image.axd?picture=2010%2f7%2f5.jpg

3) Gestion du mode online/offline (code behind):

Deux autres petites choses à savoir :
Pour tester la connectivité réseau, il suffit de tester la valeur de retour de la méthode suivante :

NetworkInterface.GetIsNetworkAvailable()

L’événement NetworkChange.NetworkAddressChanged est déclenché lorsque la connectivité change.

Deuxième chose:

Pour tester si l’application a été lancée en mode Offline, il suffit de tester la propriété suivante :

Application.Current.RunningOffline

Ou

Application.Current.ExecutionState

Qui donne plus de détails comme nous allons voir juste après.

 

Gestion des mises à jour avec une application Offline

Lorsque l’application est lancée en mode Offline et qu’une connectivité réseau est disponible alors avec une simple requête HTTP, il regarde si le fichier .xap disponible à l’Uri original a été modifié.

En cas de modification, l’ExecutionState de l’application est assigné à la valeur DetachedUpdatesAvailable.

 

ExecutionStateChanged += new EventHandler(App_ExecutionStateChanged);

 

void App_ExecutionStateChanged(object sender, EventArgs e)

{

    if(this.ExecutionState == ExecutionStates.DetachedUpdatesAvailable)

    {

         MessageBox.Show("Une nouvelle  mise à jour de l'application est disponible, elle sera disponible à son prochain démarrage");

    }

}

 

 

 

Voilà, maintenant le mode "Out Of Browser" n'a plus aucun secret pour vous !

 

 

C#, Silverlight , , ,