Sécurité des applications Java : top 10 des vulnérabilités en pratique

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 en pratique



La sécurité des applications Java n'est pas simplement une case à cocher dans une liste de contrôle, mais un aspect critique du développement. Selon OWASP, plus de 70 % des applications web modernes contiennent au moins une vulnérabilité critique. Dans cet article, nous analyserons les 10 menaces les plus courantes avec des exemples de code réels et des moyens de les corriger. Ce contenu sera utile aussi bien aux développeurs Java débutants qu'aux expérimentés.



1. Injections SQL (Injection)

L'injection SQL reste la leader des vulnérabilités. Un attaquant peut injecter du code SQL malveillant via une saisie utilisateur.



Code vulnérable :

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


Code corrigé (utilisation de PreparedStatement) :

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


2. XSS (Cross-Site Scripting)

Les attaques XSS permettent d'injecter des scripts côté client dans les pages web. La protection principale consiste à échapper la sortie.



Code vulnérable (JSP) :

<%= request.getParameter("comment") %>


Code corrigé :

<%= Encode.forHtml(request.getParameter("comment")) %>


Utilisez la bibliothèque OWASP Java Encoder pour un échappement fiable :

import org.owasp.encoder.Encode;String safeOutput = Encode.forHtml(userInput);


3. Déserialisation non sécurisée

La déserialisation Java peut entraîner une exécution de code à distance (RCE).



Code vulnérable :

ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());Object obj = ois.readObject(); // Danger !


Recommandations de protection :

  • Ne déserialisez pas les données provenant de sources non fiables
  • Utilisez une liste blanche de classes lors de la déserialisation
  • Préférez JSON ou XML plutôt que la sérialisation Java


// Approche sécurisée avec vérification de classeObjectInputStream ois = new ObjectInputStream(inputStream) {    @Override    protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {        if (!allowedClasses.contains(desc.getName())) {            throw new InvalidClassException(desc.getName(), "Déserialisation non autorisée");        }        return super.resolveClass(desc);    }};


4. CSRF (Cross-Site Request Forgery)

Les attaques CSRF forcent un utilisateur à exécuter des actions indésirables sur un site où il est authentifié.



Protection avec des jetons (Spring Security) :

@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());    }}


Ajout du jeton dans le formulaire :

<form action="/transfer" method="POST">    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>    <input type="text" name="amount"/>    <button type="submit">Transférer</button></form>


5. Fuite d'informations via les exceptions

Les messages d'erreur détaillés peuvent révéler la structure interne de l'application.



Code vulnérable :

try {    // logique métier} catch (SQLException e) {    response.getWriter().println("Erreur : " + e.getMessage()); // Fuite !}


<

Blogs

Book Recommendations