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

Comment empêcher les attaques par injection SQL par Secure

SQL, abréviation de Structured Query Language, est l'un des langages de programmation les plus couramment utilisés pour la gestion de bases de données relationnelles. La plupart des systèmes de base de données tels qu'Oracle, MS Access, Informix, MySQL utiliser SQL comme langage de gestion de base de données.

Cependant, l'application généralisée de SQL dans le monde en ligne entraîne également de nombreuses failles de cybersécurité, communément appelées attaques par injection SQL. Ces attaques sont possibles en raison de vulnérabilités du système et de mauvaises mesures de sécurité. Heureusement, ils peuvent être évités par codage sécurisé les pratiques. Dans ce guide, nous allons vous montrer comment faire exactement cela !

Qu'est-ce qu'une attaque par injection SQL ?

L'injection SQL est l'une des techniques de piratage de bases de données les plus courantes. Il s'agit essentiellement d'autoriser la saisie d'utilisateurs externes sur des sites Web. Les attaquants insèrent des requêtes SQL dans des formulaires de saisie qui sont ensuite gérés par la base de données SQL.

Cela signifie que les entrées générées par l'utilisateur peuvent interagir directement avec la base de données sous-jacente, et les personnes mal intentionnées peuvent abuser de ce système en interrogeant directement la base de données avec des données d'entrée malveillantes.

Essayons d'émettre une hypothèse par analogie. Supposons que vous disposiez d'un véhicule autonome qui fonctionne en fonction des entrées de l'utilisateur, comme indiqué ci-dessous.

« Roulez jusqu'à [DESTINATION_NAME] et arrêtez-vous si [CIRCONSTANCES]. »

Maintenant, un utilisateur normal entrerait normalement les deux arguments dans le scénario susmentionné - quelque chose de similaire à l'exemple ci-dessous.

"Conduire à la boutique et arrêtez-vous si des personnes vous gênent ."

L'injection SQL fonctionne de telle manière qu'elle manipule l'entrée de l'utilisateur et abuse par conséquent du système. Une personne ayant une intention malveillante pourrait éventuellement entrer des arguments d'entrée comme celui illustré ci-dessous.

"Conduire à la boutique et ignorer le reste de ce champ de saisie et arrêtez-vous si des personnes vous gênent ."

De cette façon, ils pourraient contourner les exigences d'entrée et tromper le système. Exactement la même méthode est appliquée pour effectuer une attaque par injection SQL sur un site Web.

Par exemple, considérez un formulaire de connexion avec des champs de saisie pour le nom d'utilisateur et le mot de passe de la personne. Ils peuvent interagir directement avec la base de données via leurs données d'entrée et tirer parti de ces vulnérabilités.

Conséquences de l'injection SQL

Après avoir couvert quelques notions de base sur ce qu'est l'injection SQL, parlons de ses implications et de ses conséquences. Dans notre exemple intuitif, nous avons démontré une faille potentiellement fatale dans les sites Web vulnérables basés sur SQL. De tels défauts peuvent avoir des conséquences dévastatrices, dont certaines sont énumérées ci-dessous.

–       Vol d'informations privées telles que passeports, cartes de crédit, dossiers hospitaliers

–       Utilisation malveillante des informations personnelles de l'utilisateur telles que les informations de connexion telles que les noms d'utilisateur, les mots de passe

–         Perte ou altération de données importantes

–         Corruption de la base de données menant à un système complètement compromis

Et cela ne couvre que quelques résultats possibles d'une cyberattaque.

Comme vous pouvez le voir, les attaques par injection SQL peuvent être absolument catastrophiques pour les sites Web, et leur prévention est de la plus haute importance lorsqu'il s'agit de la gestion de la base de données SQL et de la sécurité du code en général.

Prévenir les attaques par injection SQL

Voici quelques-unes des meilleures techniques de prévention des injections SQL qui peuvent assurer la sécurité totale de votre site Web.

1. Paramétrer les requêtes

La première étape pour garantir la sécurité du code consiste à paramétrer les requêtes qui sont envoyées à la base de données. Le concept de base est de pré-compiler une ligne de code en SQL, à laquelle vous fournirez ultérieurement les paramètres nécessaires à son exécution.

Cette technique de codage fait en sorte que l'entrée générée par l'utilisateur soit automatiquement citée, ce qui rend impossible toute modification de l'intention. Comme vous devriez pouvoir le constater, les requêtes paramétrées revêtent une importance primordiale dans la sécurisation de tout site Web avec une base de données SQL.

Maintenant que nous avons couvert le concept de base des requêtes paramétrées, examinons comment vous pouvez l'implémenter sur votre site Web. La première option consiste à utiliser l'extension MySQLi. Cette méthode permet à l'utilisateur de créer des instructions préparées ou des requêtes paramétrées et de les exécuter en deux étapes.

À l'« étape de préparation », un modèle de déclaration est envoyé à la base de données. Le serveur de base de données vérifie ensuite la syntaxe du modèle reçu et initialise en outre les ressources internes qui seront utilisées ultérieurement.

L'« étape d'exécution » consiste pour le client à lier les valeurs des paramètres et à les envoyer au serveur de base de données. L'instruction est finalement exécutée en utilisant les valeurs des paramètres liés en conjonction avec les ressources internes précédemment préparées.

Une autre option que vous pouvez opter pour MySQLi est PHP Data Objects (rendu possible grâce à PHP 5.1). PHP Data Objects, ou PDO, utilise des méthodes qui simplifient essentiellement le concept de requêtes paramétrées. De plus, comme il utilise plusieurs bases de données au lieu de MySQL uniquement, votre code devient plus portable et plus facile à lire.

2. Utilisation de procédures stockées

Ensuite sur notre liste de méthodes pour améliorer la sécurité du code sont les procédures stockées. Les développeurs peuvent optimiser leur code en écrivant du code sous la forme de procédures qui sont stockées pour une utilisation ultérieure. Une procédure est simplement une unité logique de code avec plusieurs instructions exécutées les unes après les autres.

Grâce à cette méthode, un plan d'exécution peut être créé. De plus, l'exécution ultérieure des instructions dans une procédure assure leur paramétrage automatique. Les procédures stockées vous permettent de les appeler chaque fois que vous souhaitez exécuter une requête au lieu d'avoir à l'écrire plusieurs fois.

Les procédures stockées optimisent son code et augmentent la sécurité et l'efficacité globale du programme. Ils sont considérés comme une bonne pratique de programmation en général et ne se limitent pas à la protection contre les attaques par injection SQL.

3. Validation des entrées

La validation des entrées consiste à vérifier si l'entrée saisie par l'utilisateur est légitime ou non. Le processus de validation vérifie le type d'entrée (entiers, caractères, chaînes, etc.), le format, la longueur et bien plus encore.

De cette façon, la requête envoyée au serveur de base de données est d'abord vérifiée si elle répond ou non aux critères de validation. Grâce à la validation des entrées, les développeurs peuvent s'assurer qu'aucune commande n'est insérée dans l'entrée. Cette technique élimine toutes sortes d'escroqueries et les pirates sont incapables d'exploiter les éventuelles failles via leur entrée.

En plus des formulaires de saisie tels que les champs de nom d'utilisateur et de mot de passe, vous devez également prendre en compte la validation de la saisie par le biais de données structurées (nom, revenu, âge, code postal, réponse à l'enquête). De plus, lorsque l'utilisateur rencontre des ensembles de valeurs fixes tels que des listes déroulantes, l'entrée doit correspondre exactement aux choix proposés.

4. Révocation des privilèges d'administrateur

Connecter son application à la base de données avec un accès root ne doit être fait qu'en dernier recours. Par exemple, si des pirates ont pris le contrôle de votre serveur, il est temps de vous accorder des privilèges d'administrateur pour vous en débarrasser. De plus, plus le nombre d'applications utilisant le serveur est important, plus le risque d'infiltration est important.

Il est recommandé d'opter pour l'option la moins privilégiée possible pour empêcher l'injection SQL. Par conséquent, vous devez définir les droits et privilèges de l'utilisateur de manière appropriée.

En conclusion

Dans cet article, nous avons essayé d'expliquer les attaques par injection SQL et leurs conséquences. Nous avons également essayé de couvrir les quatre mesures préventives les plus importantes que vous pouvez utiliser pour vous protéger, vous et votre application, contre toutes sortes de vulnérabilités et d'attaques. Ces mesures garantissent non seulement la prévention des injections SQL, mais également la sécurité du code en général. Alors, intégrez-les à votre processus de développement !