Injection SQL ( SQLi )

Mar 12 2023
Bonjour, Merci d'avoir pris le temps de lire l'écriture - up! Je vous en suis reconnaissant! Le contenu d'aujourd'hui portera sur la compréhension de "l'injection SQL". Le contenu est entièrement basé sur mes expériences et connaissances personnelles, des interactions avec des personnes incroyables dans l'espace App Sec et Software Development, et beaucoup de lecture et de codage sécurisé. Dans cet article, je vais essayer de simplifier le contenu dans les bases.
Apprenons ensemble | Injection SQL

Bonjour,

Merci d'avoir pris le temps de lire l'écriture - up! Je vous en suis reconnaissant!

Le contenu d'aujourd'hui portera sur la compréhension de "l'injection SQL"

Le contenu est entièrement basé sur mes expériences et connaissances personnelles, mes interactions avec des personnes incroyables dans l'espace App Sec et Software Development, et beaucoup de lecture et de codage sécurisé.

Dans cet article, je vais essayer de simplifier le contenu dans les bases. Je suis sûr que les lecteurs auront leurs propres pensées et commentaires, et je suis ouvert à tout commentaire et discussion.

Les vues / commentaires / opinions sont les miennes et non celles de mon employeur passé / actuel.

Apprenons ensemble !

Qu'est-ce que l'Injection SQL ?

Type d'attaque de sécurité d'application dans laquelle un acteur malveillant insère un code SQL malveillant dans un champ de saisie vulnérable afin d'accéder aux données d'une base de données et de les manipuler. SQLi permet à l'attaquant de visualiser/modifier/supprimer des données dans une base de données.

Comment réparer SQLi ?

Ne concaténez pas les requêtes SQL et les valeurs d'entrée.

Effectuez toujours la validation des entrées ( mon opinion personnelle, cela dissuade en fait beaucoup de signatures malveillantes ), puis suivez l'une des stratégies ci-dessous pour corriger SQLi -

  1. Requêtes paramétrées : transmettez les valeurs d'entrée en tant que paramètres aux instructions sql. Ceci est réalisé en utilisant des requêtes paramétrées. Cela empêche l'exécution d'entrées malveillantes en tant que code SQL.
  2. Procédures stockées : Il est préférable de ne pas avoir de requêtes SQL SQL dans le code et de les déplacer vers une base de données via des procédures stockées.

Requêtes paramétrées :

Dans l'exemple de code ci-dessous, le nom et le pass sont transmis en tant que paramètres à l'instruction sql via 'setString()' . C'est une méthode de PreparedStatement.

....
// simple basic example
// assume name and pass are obtained from some input
// conn is the connection
String sqlStatement = "SELECT * FROM userdetails WHERE name = ? AND pass = ?";
PreparedStatement stmt = conn.prepareStatement(sqlStatement);
stmt.setString(1, name);
stmt.setString(2, pass);
ResultSet rs = stmt.executeQuery();
// carry on with your logic
....

Dans l'exemple de code ci-dessous, 'name' et 'location' sont passés en tant que paramètres à la procédure stockée 'userDetails' via 'setString()'. C'est une méthode de CallableStatement. La sortie est reçue via le paramètre 'output' qui utilise 'registerOutParameter'. C'est une autre méthode de CallableStatement.

....
// simple basic example
// Assume name and location are obtained from some input
// conn is the connection
CallableStatement stmt = conn.prepareCall("{ call userdetails(?,?,?) }");
stmt.setString(1, name);
stmt.setString(2, location);
stmt.registerOutParameter(3, java.sql.Types.INTEGER);
stmt.execute();
int output = stmt.getInt(3);
// carry on with your logic...
....

Les commentaires / réactions sont toujours les bienvenus car je cherche toujours à améliorer le contenu et à être meilleur.

Rédaction de la source : Ma propre expérience dans App Sec, paraphrasant le contenu de plusieurs sites Web en ligne, Open AI, DALL-E, Developer et NLP tools.

Merci!

Ajoutez-moi sur LinkedIn