Sécurité des applications Java : top 10 des vulnérabilités — partie 2

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Sécurité des applications Java : top 10 des vulnérabilités — partie 2

Dans la première partie, nous avons analysé les cinq premières vulnérabilités critiques des applications Java. Aujourd'hui, nous poursuivons l'apprentissage et examinons les cinq menaces restantes que tout développeur doit connaître. Java pour débutants et programmeurs expérimentés — ces informations vous aideront à écrire un code plus sécurisé. Dans le monde de la programmation, la sécurité n'est pas une option, mais une nécessité.



6. Entités XML externes (XXE)

Les attaques XXE se produisent lorsqu'une application traite des documents XML contenant des références à des entités externes. Un attaquant peut lire des fichiers locaux, exécuter une attaque SSRF ou provoquer un déni de service.

Code vulnérable

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.parse(new InputSource(new StringReader(xmlData)));


Protection

  • Désactivez les entités externes et les DTD
  • Utilisez des analyseurs sécurisés
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);factory.setFeature("http://xml.org/sax/features/external-general-entities", false);factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);


7. Désérialisation non sécurisée

La désérialisation de données non fiables peut entraîner l'exécution de code arbitraire. C'est l'une des vulnérabilités les plus dangereuses en Java, car elle permet souvent de compromettre complètement le serveur.



Exemple d'attaque

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("data.ser"));Object obj = ois.readObject(); // dangereux !


Méthodes de protection

  • Ne désérialisez pas les données provenant de sources non fiables
  • Utilisez des listes blanches de classes
  • Appliquez des formats alternatifs (JSON, Protocol Buffers)


8. Injections SQL

Bien que ce soit un classique de la programmation, les injections SQL se rencontrent encore dans les applications Java. Utilisez toujours des requêtes paramétrées.



Incorrect (vulnérable)

String query = "SELECT * FROM users WHERE name = '" + userName + "'";Statement stmt = connection.createStatement();ResultSet rs = stmt.executeQuery(query);


Correct (sécurisé)

String query = "SELECT * FROM users WHERE name = ?";PreparedStatement pstmt = connection.prepareStatement(query);pstmt.setString(1, userName);ResultSet rs = pstmt.executeQuery();


Pour Java pour débutants, cette règle doit devenir un axiome : ne concaténez jamais de chaînes pour les requêtes SQL.



9. Défauts d'authentification et de gestion des sessions

Une authentification faible, des sessions vulnérables et une mauvaise gestion des mots de passe sont des problèmes courants dans les applications web en Java.



Recommandations

  • Utilisez des algorithmes de hachage de mots de passe modernes (bcrypt, Argon2)
  • Configurez une durée de vie de session appropriée
  • Appliquez des cookies sécurisés (HttpOnly, Secure, SameSite)
  • Implémentez l'authentification multifacteur


10. Utilisation de composants présentant des vulnérabilités connues

L'écosystème Java est riche en bibliothèques, mais de nombreux projets utilisent des versions obsolètes avec des CVE publiques. C'est l'un des problèmes de sécurité les plus courants.



Comment se protéger

  • Mettez régulièrement à jour les dépendances
  • Utilisez des outils d'analyse (OWASP Dependency-Check, Snyk)
  • Abonnez-vous aux notifications de sécurité pour les bibliothèques utilisées
  • Automatisez

Blogs

Book Recommendations