Table des matières
Résumé des méthodes de défense contre l'injection SQL
1. Démonstration de l'injection SQL classique
2. La raison de l'injection SQL
3. Défense contre l'injection SQL
Remarque
Beaux textes et images
Maison base de données tutoriel mysql mysql avancé (vingt-quatre) résumé des méthodes pour se défendre contre l'injection SQL

mysql avancé (vingt-quatre) résumé des méthodes pour se défendre contre l'injection SQL

Feb 11, 2017 am 10:53 AM

Résumé des méthodes de défense contre l'injection SQL

Cet article explique principalement les méthodes de défense contre l'injection SQL, présente ce qu'est l'injection, quelle est la raison de l'injection et comment se défendre contre cela. Les amis peuvent s'y référer.

L'injection SQL est une forme d'attaque très dangereuse. Même si les dégâts sont importants, la défense est bien moins difficile que le XSS.

L'injection SQL peut être trouvée à l'adresse : http://www.php.cn/

La raison pour laquelle la vulnérabilité d'injection SQL existe est de Paramètres SQL d'épissage. Autrement dit, les paramètres de requête utilisés pour la saisie sont directement intégrés à l'instruction SQL, ce qui entraîne des vulnérabilités d'injection SQL.

1. Démonstration de l'injection SQL classique


Nous voyons : select id ,no from user Where id=2;

Si l'instruction est obtenue en épissant des chaînes SQL, par exemple : String sql = "select id,no from user Where id=" id;

L'identifiant est un paramètre saisi par l'utilisateur Ensuite, si l'utilisateur saisit 2, alors nous pouvons voir une donnée trouvée ci-dessus. Si l'utilisateur saisit 2 ou 1=1, une attaque par injection SQL sera effectuée.

Ensuite, vous pouvez voir que l'instruction ci-dessus (select id,no from user which id=2 or 1=1;) a trouvé tous les enregistrements de la table user.

Il s'agit d'une injection SQL typique.

Regardez une autre colonne :

On voit que la table sqlinject peut être supprimée directement via sql injection ! Les dangers sont visibles !

2. La raison de l'injection SQL

La raison de l'injection SQL est, en apparence, parce que les chaînes sont épissées pour former des instructions SQL et des instructions SQL. ne sont pas précompilés et liés par des variables fixes.

Mais la raison la plus profonde est que la chaîne saisie par l'utilisateur est exécutée comme une "instruction SQL".

Par exemple, la chaîne ci-dessus sql = "select id,no from userwhere id=" id;

Nous espérons que la valeur de l'identifiant saisie par l'utilisateur n'est transmise que comme une valeur littérale de chaîne La base de données s'exécute, mais lorsque 2 ou 1=1 est entré, ou 1=1 n'est pas utilisé comme valeur littérale de Where id=, mais est exécuté comme une instruction SQL. Son essence est donc d’exécuter les données saisies par l’utilisateur sous forme de commande.

3. Défense contre l'injection SQL

1> Fondamentalement, tout le monde sait que l'utilisation d'instructions SQL pour précompiler et lier des variables est le meilleur moyen de se défendre contre l'injection SQL. Mais toutes les raisons sous-jacentes ne sont pas comprises.

String sql = "select id, no from userwhere id=?";

PreparedStatement ps = conn.prepareStatement(sql);

ps.setInt(1, id);

ps.executeQuery();

Comme indiqué ci-dessus, il s'agit d'une utilisation typique de la précompilation d'instructions SQL et des variables de liaison. Pourquoi cela peut-il empêcher l’injection SQL ?

La raison est la suivante : en utilisant PreparedStatement, l'instruction SQL : "select id, no from user which id=?" sera pré-compilée, c'est-à-dire que le moteur SQL effectuera une analyse syntaxique à l'avance et générera un arbre syntaxique. Générez un plan d'exécution, c'est-à-dire que les paramètres que vous entrez plus tard, peu importe ce que vous entrez, n'affecteront pas la structure grammaticale de l'instruction SQL, car l'analyse grammaticale est terminée et l'analyse grammaticale analyse principalement SQL. commandes, telles que select ,from ,where ,et, ou ,order by etc. Ainsi, même si vous entrez ces commandes SQL plus tard, elles ne seront pas exécutées en tant que commandes SQL, car l'exécution de ces commandes SQL doit d'abord passer l'analyse syntaxique et générer un plan d'exécution. Maintenant que l'analyse syntaxique est terminée, elle a été précompilée. . , alors les paramètres saisis ultérieurement sont absolument impossibles à exécuter en tant que commandes SQL et ne seront traités que comme des paramètres littéraux de chaîne. Par conséquent, la précompilation des instructions SQL peut empêcher l’injection SQL.

2>Cependant, tous les scénarios ne peuvent pas utiliser la précompilation des instructions SQL. Certains scénarios doivent utiliser l'épissage de chaînes. À l'heure actuelle, nous vérifions strictement le type de données des paramètres et nous pouvons également utiliser certaines fonctions de sécurité pour l'injection SQL.

Par exemple, String sql = "select id,no from userwhere id=" id;

Lors de la réception des paramètres saisis par l'utilisateur, nous vérifions strictement l'identifiant, qui ne peut être que de tapez int. Des situations complexes peuvent être déterminées à l'aide d'expressions régulières. Cela peut également empêcher l'injection SQL.

Utilisation de fonctions sécurisées, telles que :

MySQLCodec codec = new MySQLCodec(Mode.STANDARD);

name = ESAPI.encoder().encodeForSQL(codec, name ) ;

String sql = "select id,no from userwhere name=" name;

ESAPI.encoder().encodeForSQL(codec, name)

Cette fonction encodera certains caractères spéciaux contenus dans le nom afin que le moteur SQL ne traite pas la chaîne du nom comme une commande SQL pour l'analyse syntaxique.

Remarque

Dans les projets réels, nous utilisons généralement divers frameworks, tels que ibatis, mybatis, hibernate, etc. Ils sont généralement précompilés par défaut en SQL. Pour ibatis/mybatis, si vous utilisez le formulaire #{name}, alors c'est SQL précompilé. Si vous utilisez ${name}, ce n'est pas SQL précompilé.

Ce qui précède est un résumé des méthodes de défense contre les injections SQL. J'espère que cela sera utile pour les études futures de chacun.

Beaux textes et images

C'est it MySQL Advanced (24) Résumé des méthodes de défense contre l'injection SQL Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Connaissances de base en sécurité de Nginx : prévenir les attaques par injection SQL Connaissances de base en sécurité de Nginx : prévenir les attaques par injection SQL Jun 10, 2023 pm 12:31 PM

Nginx est un serveur Web rapide, performant et évolutif, et sa sécurité est un problème qui ne peut être ignoré dans le développement d'applications Web. Surtout les attaques par injection SQL, qui peuvent causer d’énormes dégâts aux applications Web. Dans cet article, nous verrons comment utiliser Nginx pour empêcher les attaques par injection SQL afin de protéger la sécurité des applications Web. Qu’est-ce qu’une attaque par injection SQL ? L'attaque par injection SQL est une méthode d'attaque qui exploite les vulnérabilités des applications Web. Les attaquants peuvent injecter du code malveillant dans les applications Web

Comment utiliser exp pour l'injection d'erreurs SQL Comment utiliser exp pour l'injection d'erreurs SQL May 12, 2023 am 10:16 AM

0x01 Préface Présentation L'éditeur a découvert un autre double débordement de données dans MySQL. Lorsque nous obtenons les fonctions dans MySQL, l'éditeur s'intéresse davantage aux fonctions mathématiques. Elles doivent également contenir certains types de données pour enregistrer les valeurs. L'éditeur a donc exécuté un test pour voir quelles fonctions provoqueraient des erreurs de débordement. Puis l'éditeur a découvert que lorsqu'une valeur supérieure à 709 est passée, la fonction exp() provoquera une erreur de débordement. mysql>selectexp(709);+-----------------------+|exp(709)|+---------- - -----------+|8.218407461554972

Détection et réparation des vulnérabilités d'injection PHP SQL Détection et réparation des vulnérabilités d'injection PHP SQL Aug 08, 2023 pm 02:04 PM

Présentation de la détection et de la réparation des vulnérabilités d'injection SQL PHP : L'injection SQL fait référence à une méthode d'attaque dans laquelle les attaquants utilisent des applications Web pour injecter de manière malveillante du code SQL dans l'entrée. PHP, en tant que langage de script largement utilisé dans le développement Web, est largement utilisé pour développer des sites Web et des applications dynamiques. Cependant, en raison de la flexibilité et de la facilité d'utilisation de PHP, les développeurs ignorent souvent la sécurité, ce qui entraîne l'existence de vulnérabilités d'injection SQL. Cet article explique comment détecter et corriger les vulnérabilités d'injection SQL dans PHP et fournit des exemples de code pertinents. vérifier

Notes de développement Laravel : méthodes et techniques pour empêcher l'injection SQL Notes de développement Laravel : méthodes et techniques pour empêcher l'injection SQL Nov 22, 2023 pm 04:56 PM

Notes de développement de Laravel : méthodes et techniques pour empêcher l'injection SQL Avec le développement d'Internet et les progrès continus de la technologie informatique, le développement d'applications Web est devenu de plus en plus courant. Au cours du processus de développement, la sécurité a toujours été une question importante que les développeurs ne peuvent ignorer. Parmi eux, la prévention des attaques par injection SQL est l’un des problèmes de sécurité qui nécessite une attention particulière lors du processus de développement. Cet article présentera plusieurs méthodes et techniques couramment utilisées dans le développement de Laravel pour aider les développeurs à prévenir efficacement l'injection SQL. Utilisation de la liaison de paramètres La liaison de paramètres est Lar

Conseils de programmation PHP : comment prévenir les attaques par injection SQL Conseils de programmation PHP : comment prévenir les attaques par injection SQL Aug 17, 2023 pm 01:49 PM

Conseils de programmation PHP : Comment prévenir les attaques par injection SQL La sécurité est cruciale lors de l'exécution d'opérations de base de données. Les attaques par injection SQL sont une attaque réseau courante qui exploite la mauvaise gestion par une application des entrées utilisateur, entraînant l'insertion et l'exécution de code SQL malveillant. Pour protéger notre application contre les attaques par injection SQL, nous devons prendre quelques précautions. Utiliser des requêtes paramétrées Les requêtes paramétrées constituent le moyen le plus simple et le plus efficace de prévenir les attaques par injection SQL. Cela fonctionne en comparant les valeurs saisies par l'utilisateur avec une requête SQL

Comment empêcher les attaques par injection SQL à l'aide de PHP Comment empêcher les attaques par injection SQL à l'aide de PHP Jun 24, 2023 am 10:31 AM

Dans le domaine de la sécurité des réseaux, les attaques par injection SQL sont une méthode d'attaque courante. Il exploite le code malveillant soumis par des utilisateurs malveillants pour modifier le comportement d'une application afin d'effectuer des opérations dangereuses. Les attaques par injection SQL courantes incluent les opérations de requête, les opérations d'insertion et les opérations de suppression. Parmi elles, les opérations de requête sont les plus fréquemment attaquées, et une méthode courante pour empêcher les attaques par injection SQL consiste à utiliser PHP. PHP est un langage de script côté serveur couramment utilisé dans les applications Web. PHP peut être lié à MySQL, etc.

Filtrage de formulaire PHP : prévention et filtrage des injections SQL Filtrage de formulaire PHP : prévention et filtrage des injections SQL Aug 07, 2023 pm 03:49 PM

Filtrage de formulaire PHP : prévention et filtrage des injections SQL Introduction : Avec le développement rapide d'Internet, le développement d'applications Web est devenu de plus en plus courant. Dans le développement Web, les formulaires sont l’un des moyens d’interaction les plus courants avec les utilisateurs. Cependant, il existe des risques de sécurité dans le traitement des données de soumission des formulaires. Parmi eux, l’un des risques les plus courants concerne les attaques par injection SQL. Une attaque par injection SQL est une méthode d'attaque qui utilise une application Web pour traiter de manière inappropriée les données saisies par l'utilisateur, permettant à l'attaquant d'effectuer des requêtes de base de données non autorisées. L'attaquant passe le

Améliorer la sécurité du système : les conseils MyBatis pour prévenir les attaques par injection SQL Améliorer la sécurité du système : les conseils MyBatis pour prévenir les attaques par injection SQL Feb 21, 2024 pm 09:12 PM

Améliorer la sécurité du système : les conseils MyBatis pour prévenir les attaques par injection SQL Avec le développement continu des technologies de l'information, les applications de bases de données sont devenues un élément indispensable des systèmes logiciels modernes. Cependant, ce qui suit concerne les problèmes de sécurité des bases de données, le plus courant et le plus grave étant probablement les attaques par injection SQL. Les attaques par injection SQL font référence à des attaquants qui insèrent du code SQL malveillant dans des champs de saisie pour obtenir illégalement des informations dans la base de données ou détruire l'intégrité de la base de données. Pour se protéger contre SQL

See all articles