Maison >base de données >tutoriel mysql >Qu'est-ce que l'injection SQL ? Vous faire comprendre l'injection SQL à partir de zéro

Qu'est-ce que l'injection SQL ? Vous faire comprendre l'injection SQL à partir de zéro

php是最好的语言
php是最好的语言original
2018-07-26 17:52:572808parcourir

Comprendre l'injection SQL à partir de zéro, qu'est-ce que l'injection SQL ? L'injection SQL signifie que je suis le seul à pouvoir faire fonctionner la base de données. Je vous laisse simplement entrer le contenu et partir, mais vous entrez la commande, exploitant ainsi la base de données à mon insu

Injection SQL

1. Qu'est-ce que l'injection SQL ?

  • Regardez le scénario de cas suivant, qui est un scénario de connexion normal :

Quest-ce que linjection SQL ? Vous faire comprendre linjection SQL à partir de zéro

  • Et lorsque nous utilisons le nom d'utilisateur ': –, nous pouvons nous connecter avec succès en entrant le mot de passe ↓

Quest-ce que linjection SQL ? Vous faire comprendre linjection SQL à partir de zéro

  • À ce stade, en comparant les deux SQL, vous pouvez constater qu'en fait, l'utilisateur a mis fin au SQL interne plus tôt en écrivant le symbole sql dans le nom de l'utilisateur et en commentant les conditions de recherche dans la seconde moitié de la phrase pour éviter le problème de connexion par mot de passe.

L'injection SQL signifie que je suis le seul à pouvoir faire fonctionner la base de données. À l'origine, je vous laissais simplement entrer le contenu et partir, mais vous entrez la commande, opérant ainsi. la base de données à mon insu

2. Réparation de vulnérabilité

  • La raison pour laquelle le SQL ci-dessus utilise l'épissage dynamique, donc la façon dont le SQL est transmis en mai Changez la sémantique de SQL.

L'épissage dynamique est l'utilisation mixte de variables Java et d'instructions SQL en Java : sélectionnez * from user où userName='"+userName+"' et password = '"+password " '

  • Utilisez donc le SQL paramétré de PrepareStatement. En déterminant d'abord la sémantique puis en passant les paramètres, la sémantique du SQL ne sera pas modifiée en raison des paramètres transmis . (Transmettez les paramètres via setInt, setString, setBoolean)

3. Cas d'utilisation SQL paramétré

            //建立数据连接
            conn=ds.getConnection();
            //1.设置prepareStatement带占位符的sql语句
            PreparedStatement ptmt = conn.prepareStatement("select * from user where userName = ? and password = ?");
            ptmt.setString(1, "张三");      //2.设置参数
            ptmt.setString(2, "123456");
            rs=ptmt.executeQuery();     

            while(rs.next()){
                System.out.println("登陆成功");
                return;
            }
            System.out.println("登陆失败");
  • .

Fonctionnalités paramétrées :

1. Définir l'instruction SQL de PrepareStatement avec un espace réservé

Mode d'exécution de l'instruction SQL par l'instruction :

stmt=conn.createStatement();
rs=stmt.executeQuery("select userName from user");

2. Définir les paramètres

PerparedStatement hérite de Statement, et les fonctionnalités qui le rendent paramétré en SQL sont principalement utilisées ici.

Redirigé : https://blog.csdn.net/qq_30258957/article/details/78145885

Ajouté : 1. PreparedStatement étend la déclaration ;

2. L'instruction convient à l'exécution de SQL statique (inconditionnel) et PreparedStatement convient à l'exécution de SQL dynamique (conditionnel);

3.PreparedStatement peut éviter les attaques par injection;

Articles connexes :

Une injection PHP anti-SQL que je pense très sûre doit être crackée

Compréhension approfondie de l'injection SQL et des mesures préventives

Vidéos associées :

Tutoriel vidéo sur le développement pratique de centres commerciaux SQL Injection-PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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