Bonjour,

Je suis en reconversion pro en BTS SIO.

Si part le plus grand des hasards quelqu'un bosse à l'éducation nationale passe par là, le contenu demandé en première année de BTS SIO est juste ridicule:
Python, C#, Java, HTML, CSS, Bootstrap, WordPress, Javascript, MySQL, POSTGRESQL, NoSQL, Sciences-eco, Droit, Management, Culture Gé.

Dans toutes ces connaissances additionnées les unes à la suite des autres traitées n'importe comment (on a 10 pages de cours sur le Web pour chaque langage et on nous demande d'apprendre seuls) il faut aussi rajouter la Cybersécurité. Dans ce cours on nous demande de détecter les failles de sécurité dans un code en PHP mais on n'a pas de cours de PHP.
Le prof nous dit que l'on est sensé comprendre un code d'un langage que l'on n'a jamais vu...

Analysez le code qui permet de vérifier la connexion d’un utilisateur sur le module interne. Peut-on dire que le système est sécurisé ? Indiquez les éléments sécurisés et non sécurisés ?

Proposez les améliorations à apporter (tenir compte de tous les aspects).

Proposez le code modifié de la connexion (soit en PHP soit en pseudo-code). Si vous apportez des modifications hors du code veuillez les préciser) ?
En cherchant sur internet je suis tombé sur les articles suivants. Je pense que cela pourrait répondre à la question mais je ne sais pas si cela est pertinent par rapport aux questions posées :
https://www.php.net/manual/fr/securi...-injection.php

Sur le lien ils citent :
  • risque de séparation des résultats en pages, et créer des administrateurs (PostgreSQL et MySQL). Là les variables sont différentes mais est-ce que ce serait la même chose entre pass = $_POST['pass']; ?
  • injection SQL
  • ajout de mot de passe
  • révélation des mots de passe
  • modifier un mot de passe ... et gain de droits
  • attaque d'un serveur de base de données



Je pense que ces éléments doivent pouvoir répondre à la question mais je n'arrive pas à les associer avec le code ci-dessous.
Si quelqu'un pourrait m'aider je lui en serai très reconnaissant.
Si vous pourriez également proposer un contenu pour apprendre PHP (gratuit si possible, j'en ai marre de devoir payer des cours parce que les profs ne donnent pas de cours, merci le CNED hein ?) et quel IDE vous recommander pour apprendre.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php   
      $pseudo = $_POST['pseudo'];  
      $pass = $_POST['pass'];
 
 
include ('pdo.php');
 
/ Vérification des identifiants
$req = $bdd->prepare('SELECT * FROM salarie WHERE pseudo = :pseudo);
$req->execute(array(    
      'pseudo' => $pseudo
));

$resultat = $req->fetch();

if (!$req)
{    
      echo 'Mauvais identifiant ou mot de passe !';
}
else
{
switch ($req ['group']) {    
          case 'Assistant':        
                   $pass_std = 'PswAss' .$req ['region'];        
                   break;    
          case 'Agent':        
                   $pass_std = 'Pswagt' .$req ['region'];        
                   break;    
          case 'Responsable':        
                   $pass_std = 'Pswresp' .$req ['region'];        
                   break;
}    
        if ($pass_std ==$pass )    
        {     
               echo 'Vous êtes connecté !';    
        }    
       else    
        {     
          echo 'Mauvais identifiant ou mot de passe !';    
        }
}

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php 
 
include ('pdo.php');
 
$fiche = [                     
                  'NOM'=> $_POST['NOM'],                     
                  'PRENOM'=> $_POST['PRENOM'],                    
                  'ADRESSE'=> $_POST['ADRESSE'],                    
                  'VILLE'=> $_POST['VILLE'],                    
                  'CP'=> $_POST['CP'],                    
                  'PAYS'=> $_POST['PAYS'],                    
                  'TEL'=> $_POST['TEL'],                    
                  'MAIL'=> $_POST['MAIL'],                    
                  'AGE'=> $_POST['AGE'],                    
                  'COUPLE'=> $_POST['COUPLE'],                    
                  'NBENFANT'=> $_POST['NBENFANT'],                    
                  'LOGIN'=> $_POST['LOGIN'],                    
                  'PSW'=> sha1($_POST['PSW'],
]; 
 
// Vérification des identifiants
$req  =  ('INSERT  INTO  VISITEUR  (NOM,PRENOM,ADRESSE,VILLE,CP,PAYS,TEL,MAIL,AGE,COUPLE,NBENFANT,LOGIN,PSW)  VALUES  (  :NOM,  :PRENOM,  :ADRESSE,  :VILLE,  :CP,  :PAYS,  :TEL,  :MAIL,  :AGE,  :COUPLE,  :NBENFANT, :LOGIN, :PSW));

$stmt= $pdo->prepare($req);
$stmt->execute($fiche);