Table des matières
Comment prévenir les vulnérabilités de sécurité dans la sérialisation Java
Types de vulnérabilités
Précautions
Exemple réaliste
Maison Java javaDidacticiel Comment prévenir les failles de sécurité dans la sérialisation Java ?

Comment prévenir les failles de sécurité dans la sérialisation Java ?

Apr 16, 2024 pm 12:36 PM
apache 安全漏洞 sérialisation Java

La prévention des vulnérabilités de sérialisation Java nécessite une approche à plusieurs volets, notamment : Utiliser des listes blanches pour limiter les classes sérialisables. Utilisez des filtres pour inspecter les objets, vérifier les signatures ou chiffrer les objets. Désactivez le processus de désérialisation. Isolez le processus de désérialisation et exécutez-le dans un environnement contrôlé. Mettez en œuvre la validation des entrées, utilisez des pratiques de codage sécurisées et mettez régulièrement à jour les logiciels et les dépendances pour renforcer les applications.

Comment prévenir les failles de sécurité dans la sérialisation Java ?

Comment prévenir les vulnérabilités de sécurité dans la sérialisation Java

La sérialisation Java est un processus de conversion d'objets au format binaire pour le stockage ou la transmission. Ce processus, s’il n’est pas conçu avec soin, peut introduire de graves vulnérabilités en matière de sécurité. Cet article explorera les types de ces vulnérabilités et comment les prévenir.

Types de vulnérabilités

Il existe deux principaux types de vulnérabilités de sérialisation Java :

  • Exécution de code à distance (RCE) : un attaquant peut exploiter le processus de sérialisation pour exécuter du code arbitraire sur l'ordinateur de la victime.
  • Deserialization Replay Attack : un attaquant peut rejouer un objet précédemment sérialisé pour déclencher des opérations non autorisées.

Précautions

La prévention des vulnérabilités de sérialisation Java nécessite une approche à plusieurs volets :

1. Utilisez une liste blanche

Utilisez une liste blanche pour limiter les classes qui peuvent être sérialisées et autoriser uniquement la sérialisation des classes de confiance. Cela atténue le risque de vulnérabilités RCE.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

import java.io.Serializable;

import java.util.HashSet;

import java.util.Set;

 

public class SerializableFilter implements SerializableFilter {

 

    private Set<String> allowedClasses = new HashSet<>();

 

    public SerializableFilter() {

        allowedClasses.add("com.example.user.User");

        allowedClasses.add("com.example.product.Product");

    }

 

    @Override

    public boolean accept(Class<?> clazz) {

        return allowedClasses.contains(clazz.getName());

    }

 

}

Copier après la connexion

2. Utilisez des filtres

Utilisez des filtres pour inspecter les objets pendant la sérialisation et la désérialisation. Les filtres peuvent vérifier la signature d'un objet, chiffrer l'objet ou vérifier la présence d'attributs suspects.

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

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.io.ObjectOutputStream.PutField;

import java.lang.reflect.Field;

 

public class SerializationFilter implements ObjectOutputFilter {

 

    @Override

    public ObjectOutputStream filter(ObjectOutputStream out) {

        return new ObjectOutputStream(out) {

 

            @Override

            protected PutField putFields() throws IOException {

                return new PutField() {

 

                    @Override

                    public void put(String name, Object value) throws IOException {

                        if (value instanceof SensitiveData) {

                            throw new SecurityException("Cannot serialize sensitive data");

                        }

                        super.put(name, value);

                    }

                     

                };

            }

             

        };

    }

 

}

Copier après la connexion

3. Désactivez la désérialisation

Désactivez le processus de désérialisation lorsque cela est possible. Par exemple, vous pouvez désactiver la désérialisation dans un servlet.

1

2

3

4

5

6

7

8

9

10

11

import javax.servlet.ServletContext;

 

public class ServletInitializer implements ServletContextListener {

 

    @Override

    public void contextInitialized(ServletContextEvent sce) {

        ServletContextListener.super.contextInitialized(sce);

        sce.getServletContext().setAttribute("org.apache.catalina.connector.RMI_SERVER", "disabled");

    }

     

}

Copier après la connexion

4. Isoler la désérialisation

Si vous ne pouvez pas désactiver la désérialisation, vous pouvez isoler le processus de désérialisation et l'effectuer dans un environnement contrôlé. Par exemple, la désérialisation peut être effectuée dans une machine virtuelle ou un conteneur distinct.

5. Renforcez votre application

En plus des mesures de sécurité spécifiques à la sérialisation, les vulnérabilités peuvent être évitées en renforçant votre application, notamment :

  • Mise en œuvre de la validation des entrées.
  • Utilisez des pratiques de codage sécurisées.
  • Mettez régulièrement à jour le logiciel et les dépendances.

Exemple réaliste

Considérez l'exemple suivant :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

import java.io.FileOutputStream;

import java.io.ObjectOutputStream;

 

public class VulnerableClass {

 

    private String name;

 

    public VulnerableClass(String name) {

        this.name = name;

    }

 

    public static void main(String[] args) {

        try (FileOutputStream fos = new FileOutputStream("malicious.ser");

             ObjectOutputStream oos = new ObjectOutputStream(fos)) {

            oos.writeObject(new VulnerableClass("attacker-controlled-data"));

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

     

}

Copier après la connexion

Cet exemple de code crée un objet VulnerableClass qui contient des données contrôlées par l'attaquant. L'objet est sérialisé dans le fichier malware.ser. Un attaquant pourrait exploiter ces données pour exécuter du code arbitraire sur un ordinateur victime à l'aide d'un exploit RCE modifié. VulnerableClass 对象,其中包含攻击者控制的数据。该对象被序列化到文件恶意.ser。攻击者可以使用经过修改的 RCE 漏洞攻击利用此数据在受害者计算机上执行任意代码。

通过应用上述预防措施,我们可以抵御此类漏洞。例如,我们可以使用白名单仅允许 VulnerableClass

En appliquant les précautions mentionnées ci-dessus, nous pouvons nous protéger contre de telles vulnérabilités. Par exemple, nous pourrions utiliser une liste blanche pour autoriser uniquement la sérialisation des versions fiables de VulnerableClass.

Conclusion

La vulnérabilité de sérialisation Java est une menace sérieuse pour la sécurité. En adoptant une approche à plusieurs volets, notamment l'utilisation de listes blanches, de filtres, la désactivation de la désérialisation, l'isolation de la désérialisation et le renforcement des applications, nous pouvons prévenir efficacement ces vulnérabilités. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment exécuter le projet H5 Comment exécuter le projet H5 Apr 06, 2025 pm 12:21 PM

L'exécution du projet H5 nécessite les étapes suivantes: Installation des outils nécessaires tels que le serveur Web, Node.js, les outils de développement, etc. Créez un environnement de développement, créez des dossiers de projet, initialisez les projets et écrivez du code. Démarrez le serveur de développement et exécutez la commande à l'aide de la ligne de commande. Aperçu du projet dans votre navigateur et entrez l'URL du serveur de développement. Publier des projets, optimiser le code, déployer des projets et configurer la configuration du serveur Web.

Comment exporter PDF avec XML Comment exporter PDF avec XML Apr 03, 2025 am 06:45 AM

Il existe deux façons d'exporter XML vers PDF: en utilisant XSLT et en utilisant des bibliothèques de liaison de données XML. XSLT: Créez une feuille de style XSLT, spécifiez le format PDF pour convertir les données XML à l'aide du processeur XSLT. Bibliothèque de liaison de données XML: Importez la bibliothèque de liaison de données XML Créer des fichiers PDF PDF Document Chargement des fichiers PDF d'exportation de données XML. Quelle méthode est la meilleure pour les fichiers PDF dépend des exigences. XSLT offre une flexibilité, tandis que la bibliothèque de liaison des données est simple à implémenter; Pour les conversions simples, la bibliothèque de liaison des données est meilleure et pour les conversions complexes, XSLT est plus approprié.

Dépannage Apache: diagnostic et résolution des erreurs communes Dépannage Apache: diagnostic et résolution des erreurs communes Apr 03, 2025 am 12:07 AM

Les erreurs Apache peuvent être diagnostiquées et résolues en affichant des fichiers journaux. 1) Affichez le fichier error.log, 2) Utilisez la commande grep pour filtrer les erreurs dans des noms de domaine spécifiques, 3) Nettoyez régulièrement les fichiers journaux et optimisez la configuration, 4) Utilisez des outils de surveillance pour surveiller et alerter en temps réel. Grâce à ces étapes, les erreurs Apache peuvent être diagnostiquées et résolues efficacement.

Comment générer pom.xml Comment générer pom.xml Apr 03, 2025 am 06:00 AM

Il existe les moyens suivants de générer un fichier pom.xml: utilisez Maven Archetype pour fournir des modèles de projet prédéfinis pour générer automatiquement des fichiers pom.xml pour des types de projets spécifiques. Utilisez le plugin Maven Helper pour fournir des commandes pour générer des fichiers pom.xml. Créez manuellement pour personnaliser le fichier pom.xml pour le projet.

Comment régler le codage des caractères du côté serveur pour résoudre la table de bootstrap Briked Comment régler le codage des caractères du côté serveur pour résoudre la table de bootstrap Briked Apr 07, 2025 pm 12:00 PM

Pour définir l'encodage des caractères côté serveur pour résoudre la table de bootstrap brouillé, vous devez suivre les étapes suivantes: Vérifiez le codage des caractères du serveur; modifier le fichier de configuration du serveur; Définissez le codage des caractères sur UTF-8; Enregistrer et redémarrer le serveur; Vérifiez le codage.

Impossible de démarrer MySQL dans XAMPP Impossible de démarrer MySQL dans XAMPP Apr 08, 2025 pm 03:15 PM

Il existe de nombreuses raisons pour lesquelles XAMPP ne parvient pas à démarrer MySQL, y compris les conflits de port, les erreurs de fichiers de configuration, les autorisations système insuffisantes, les problèmes de dépendance au service et les problèmes d'installation. Les étapes de dépannage sont les suivantes: 1) Vérifier les conflits du port; 2) vérifier les fichiers de configuration; 3) Vérifier les autorisations du système; 4) Vérifier les dépendances des services; 5) Réinstaller MySQL. Suivez ces étapes et vous pouvez trouver et résoudre les problèmes qui font échouer le démarrage de MySQL.

Comment prévisualiser la page bootstrap Comment prévisualiser la page bootstrap Apr 07, 2025 am 10:06 AM

Les méthodes d'aperçu des pages bootstrap sont: ouvrez le fichier HTML directement dans le navigateur; actualiser automatiquement le navigateur à l'aide du plug-in Live Server; et créer un serveur local pour simuler un environnement en ligne.

Résumé des vulnérabilités de phpmyadmin Résumé des vulnérabilités de phpmyadmin Apr 10, 2025 pm 10:24 PM

La clé de la stratégie de défense de sécurité PHPMYADMIN est: 1. Utilisez la dernière version de PhpMyAdmin et mettez régulièrement à jour PHP et MySQL; 2. Contrôler strictement les droits d'accès, utiliser .htaccess ou le contrôle d'accès au serveur Web; 3. Activer le mot de passe fort et l'authentification à deux facteurs; 4. Sauvegarder régulièrement la base de données; 5. Vérifiez soigneusement les fichiers de configuration pour éviter d'exposer des informations sensibles; 6. Utiliser le pare-feu d'application Web (WAF); 7. Effectuer des audits de sécurité. Ces mesures peuvent réduire efficacement les risques de sécurité causés par le phpmyadmin en raison d'une configuration inappropriée, d'une version antérieure ou de risques de sécurité environnementale, et d'assurer la sécurité de la base de données.

See all articles