MariaDB - Protection des injections SQL

Le simple fait d'accepter l'entrée de l'utilisateur ouvre la porte à des exploits. Le problème vient principalement de la gestion logique des données, mais heureusement, il est assez facile d'éviter ces failles majeures.

Les opportunités d'injection SQL se produisent généralement lorsque les utilisateurs saisissent des données telles qu'un nom et que la logique du code ne parvient pas à analyser cette entrée. Le code, à la place, permet à un attaquant d'insérer une instruction MariaDB, qui s'exécutera sur la base de données.

Tenez toujours compte des données saisies par les utilisateurs, suspectes et ont besoin d'une forte validation avant tout traitement. Effectuez cette validation par correspondance de modèles. Par exemple, si l'entrée attendue est un nom d'utilisateur, limitez les caractères saisis aux caractères alphanumériques et aux traits de soulignement, et à une certaine longueur. Passez en revue un exemple donné ci-dessous -

if(check_match("/^\w{8,20}$/", $_GET['user_name'], $matches)) {
   $result = mysql_query("SELECT * FROM system_users WHERE user_name = $matches[0]");
} else {
   echo "Invalid username";
}

Utilisez également l'opérateur REGEXP et les clauses LIKE pour créer des contraintes d'entrée.

Considérez tous les types de contrôle explicite nécessaire des entrées tels que -

  • Contrôlez les caractères d'échappement utilisés.

  • Contrôlez les types de données appropriés spécifiques pour l'entrée. Limitez l'entrée au type et à la taille de données nécessaires.

  • Contrôlez la syntaxe des données saisies. Ne laissez rien en dehors du modèle requis.

  • Contrôlez les conditions autorisées. Liste noire des mots clés SQL.

Vous ne connaissez peut-être pas les dangers des attaques par injection, ou pouvez les considérer comme insignifiants, mais ils figurent en tête de liste des problèmes de sécurité. En outre, considérez l'effet de ces deux entrées -

1=1
-or-
*

Un code permettant de saisir l'un de ces éléments avec la bonne commande peut entraîner la révélation de toutes les données utilisateur de la base de données ou la suppression de toutes les données de la base de données, et aucune des deux injections n'est particulièrement intelligente. Dans certains cas, les attaquants ne passent même pas de temps à examiner les trous; ils effectuent des attaques aveugles avec une simple entrée.

Pensez également aux outils de correspondance de modèles et d'expression régulière fournis par tout langage de programmation / script associé à MariaDB, qui offrent plus de contrôle et parfois un meilleur contrôle.