d3:tp04:suite

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
d3:tp04:suite [2025/09/25 22:51] – [Travail à faire] dthevenotd3:tp04:suite [2025/09/28 19:10] (Version actuelle) – [V. Attention : injection SQL, faille XSS (Cross-Site Scripting) en vue…] dthevenot
Ligne 1: Ligne 1:
-====== D3-TP04-suite : Persistance des données (2) ======+====== D3-TP04-suite : Projet gestion de clients - Persistance des données (2) ======
 ===== Contexte ===== ===== Contexte =====
 Nous poursuivons notre application permettant de gestion des clients d'une entreprise de travaux  publics. Cette application doit permettre :  Nous poursuivons notre application permettant de gestion des clients d'une entreprise de travaux  publics. Cette application doit permettre : 
Ligne 22: Ligne 22:
 La méthode **getGeneratedKeys** permet de récupérer l'identifiant du client créé.  La méthode **getGeneratedKeys** permet de récupérer l'identifiant du client créé. 
  
-Exemple de méthode create pour l'ajout d'une occurrence dans une table Salarie : +Exemple de méthode **create** pour l'ajout d'une occurrence dans une table Salarie (avec requête préparée)
-<code> +<code ruby ClientMysql.java
 +public int create(Client unClient){ 
 +         int id=-1; 
 +         String sql = "INSERT INTO client (nom, prenom, mail) VALUES (?,?,?);"; 
 +          
 +         try (PreparedStatement prepStmt = theConnection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) { 
 +             
 +            prepStmt.setString(1, unClient.getNom());//le param. 1 est remplacé par le nom du client 
 +            prepStmt.setString(2, unClient.getPrenom()); 
 +            prepStmt.setString(3, unClient.getMail()); 
 +              
 +            int status = prepStmt.executeUpdate(); 
 +             // récupération de la clé auto-générée 
 +            if (status > 0) { 
 +                try (ResultSet result = prepStmt.getGeneratedKeys()) { 
 +                    if (result.next()) {  // <-- utiliser next() et pas first() 
 +                        id = result.getInt(1); 
 +                    } 
 +                 } 
 +            } 
 +            prepStmt.close(); 
 +             
 +         } catch(SQLException ex){ 
 +            System.out.println("SQLException:"+ex.getMessage()); 
 +            System.out.println("SQLState:"+ex.getSQLState()); 
 +            System.out.println("code Erreur:"+ex.getErrorCode()); 
 +        } 
 +         return id; 
 +     } 
 +}
 </code> </code>
 ==== III. Créer la classe NouveauClientForm dans le package com.test.forms ==== ==== III. Créer la classe NouveauClientForm dans le package com.test.forms ====
Ligne 48: Ligne 76:
   - En quoi cela est-il dangereux ?    - En quoi cela est-il dangereux ? 
 Pour résoudre ce problème, de type faille xss, il faudra tester les zones saisies, elles ne devront pas  comporter le caractère "<" : Pour résoudre ce problème, de type faille xss, il faudra tester les zones saisies, elles ne devront pas  comporter le caractère "<" :
-  * Modifier la méthode verifierClient de la classe NouveauClientForm, utiliser la méthode indexOf pour  vérifier l'absence du caractère "<" au niveau des zones saisies. La création d'un client ne devra se faire  que si ce caractère n'pas été saisi. +  * Utiliser une expression régulière et la méthode matches pour vérifier qu'il n'que des caractères
  
 Tester.  Tester. 
- 
-Pour résoudre le problème de type injection SQL (code SQL introduit dans des variables de sélection), il  existe un moyen efficace : **les requêtes préparées** 
-  
-Donc utiliser des requêtes préparées. 
  
  
  • d3/tp04/suite.1758833513.txt.gz
  • Dernière modification : 2025/09/25 22:51
  • de dthevenot