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