Comment prévenir l'injection SQL

Qu'est-ce que l'injection SQL (SQLi) ?

Tout le monde sait qu'avec l'avancement de la technologie, la sécurité est la caractéristique de base et importante pour chaque entreprise et plate-forme de médias sociaux. Presque toutes les entreprises relaient leurs données commerciales, ces données stockent dans les bases de données. Donc, SQL fournit des techniques pour sauver vos données des pirates. Nous pouvons protéger les données de notre site Web contre les pirates en utilisant différentes techniques. De même, l'injection SQL est une technique de piratage. Les pirates peuvent accéder à vos données, ils peuvent également planter vos serveurs en injectant du code dans vos bases de données. Cette méthode est rendue possible en raison d'un codage incorrect des packages Web inclinés. Certains nouveaux développeurs ne vérifient pas le vide du champ de données et les champs vides sont la cause de l'injection SQL.

Empêcher l'injection SQL via des requêtes paramétrées

Cette approche consiste à utiliser des déclarations préparées avec le point d'interrogation (?) dans nos requêtes chaque fois que nous devons insérer des frais fournis par le consommateur. Ceci est très efficace et, à moins qu'il y ait un ver dans l'implémentation de la force motrice JDBC, à l'abri des exploits.

Un exemple de code simple pour cette technique est :

public List safeFindAccountsByCustomerId( String customerId )

lance une exception {

Chaîne sql = ‘ select ‘ + ‘ customer_id, acc_number, branch_id, balance from Accounts ‘ + ‘ where customer_id = ? ' ;

Connexion c = dataSource.getConnection( ) ;

PrepareStatement p = c.prepareStatement( sql ) ;

p.setString( 1 , IDclient ) ;

ResultSet rs = p.executeQuery( sql ) );

// omis - traite les lignes et renvoie une liste de comptes

}

Dans le code ci-dessus, la méthode prepareStatement() disponible dans l'exemple Connection pour obtenir un PreparedStatement. Cela nous permet d'insérer correctement les valeurs fournies par la personne dans une question avant de l'exécuter.

L'utilisation des requêtes préparées PDO

Utilisez PDO et des requêtes préparées.

($conn est un objet PDO)

$stmt = $conn -> prepare (‘ INSERT INTO tbl VALUES ( :Id , :name ) ‘ ) ;

$stmt -> bindValue ( ‘ :id ‘ , $id ) ;

$stmt -> bindValue(‘ :nom ‘ , $nom ) ;

$stmt -> execute( ) ;

Les instructions préparées sont résilientes à l'injection SQL, car les valeurs des paramètres, qui sont transmises ultérieurement à l'aide d'un protocole unique en son genre, n'ont plus besoin d'être échappées avec succès. Si le modèle de déclaration d'origine n'est pas dérivé d'une entrée extérieure, l'injection SQL ne peut pas se produire.

Empêcher via le mappage relationnel objet (ORM) dans Ruby Framework

De nombreuses équipes de développement choisissent d'utiliser des frameworks ORM (Object Relational Mapping) pour rendre la traduction des unités de résultat SQL en objets de code plus transparente. Les outils ORM suggèrent souvent que les développeurs doivent rarement écrire des instructions SQL de leur code - et ces outils utilisent volontiers des instructions paramétrées sous le capot.

def utilisateur_courant (e-mail)

# L'objet 'User' est un objet Active Record qui doit trouver des méthodes

# généré automatiquement par Rails.

Utilisateur.find_by_email (e-mail)

Finir

Le code ci-dessus vous évitera des injections SQL ou des attaques de pirates.

Base de données cryptée

Une autre méthode simple pour empêcher votre base de données SQL d'être injectée est la base de données ou les données cryptées. Enregistrez donc généralement les informations d'identification de votre base de données dans un rapport séparé et chiffrez-le en toute sécurité pour vous assurer que les attaquants ne peuvent pas en profiter largement.