Position actuelle: Accueil> Derniers articles> Sérialisation pour le stockage crypté: comment assurer la sécurité des données?

Sérialisation pour le stockage crypté: comment assurer la sécurité des données?

gitbox 2025-05-19

La fonction de la fonction sérialisée consiste à convertir une structure de données PHP (telle que les tableaux, objets) en une chaîne. Grâce à cette fonction, nous pouvons convertir des données complexes en un format qui peut être stocké.

Exemple:

 $data = array("username" => "admin", "password" => "123456");
$serialized_data = serialize($data);
echo $serialized_data;

La chaîne de sortie est la suivante:

 a:2:{s:8:"username";s:5:"admin";s:8:"password";s:6:"123456";}

Cette chaîne peut être stockée en toute sécurité dans un fichier ou une base de données. Mais comme mentionné précédemment, le sérialisation elle-même ne fournit pas de mécanisme de chiffrement, de sorte que les données stockées sont du texte brut et sont facilement falsifiées ou volées par des criminels.

2. Stockage crypté

Pour assurer la sécurité des données stockées pendant la transmission ou le stockage, il est généralement nécessaire de crypter la chaîne de sérialisation . Les méthodes de chiffrement communes comprennent le cryptage symétrique et le cryptage asymétrique. Dans PHP, nous pouvons utiliser des fonctions de chiffrement telles que OpenSSL_encrypt , sodium_crypto_secretbox , etc. pour chiffrer les données.

Crypter les données à l'aide d'OpenSSL

Voici un exemple de code pour crypter le stockage en fonction de la sérialisation :

 $data = array("username" => "admin", "password" => "123456");
$serialized_data = serialize($data);

// Générer une clé(Généralement, il doit être stocké confidentiellement)
$key = "secretkey123";

// utiliser OpenSSL Cryptage
$encrypted_data = openssl_encrypt($serialized_data, "AES-128-ECB", $key);

// Stocker des données cryptées
echo "Encrypted: " . $encrypted_data;

Dans le code ci-dessus, les données sont d'abord converties en une chaîne en utilisant Serialize , puis chiffrées par la fonction OpenSSL_ECCRYPT . L'algorithme de chiffrement symétrique AES-128-ECB est utilisé ici (dans les applications réelles, vous pouvez choisir d'autres méthodes de chiffrement). Après le cryptage, les données deviendront illisibles.

Décrypter les données

Lorsque nous devons utiliser des données cryptées stockées, nous pouvons utiliser OpenSSL_DECRYPT pour décrypter:

 $decrypted_data = openssl_decrypt($encrypted_data, "AES-128-ECB", $key);
$unserialized_data = unserialize($decrypted_data);

// Données décryptées de sortie
print_r($unserialized_data);

Après le décryptage via OpenSSL_DECRYPT , nous pouvons utiliser la fonction non sérialisée pour restaurer les données cryptées à la structure de données PHP d'origine.

3. Comment assurer la sécurité des données stockées?

Le stockage des données cryptées n'est qu'une partie de l'assurance de la sécurité des données. Pour améliorer encore la sécurité, nous devons prendre des mesures supplémentaires:

1. Utilisez HTTPS

Lors du transfert de données sensibles, assurez-vous d'utiliser le protocole HTTPS, qui garantit que les données ne sont pas interceptées pendant la transmission.

2. Choisissez un mot de passe et une clé solides

La clé utilisée pour le cryptage doit être forte et confidentielle. Évitez d'utiliser des clés simples ou facilement devinées. Vous pouvez utiliser openssl_random_pseudo_bytes pour générer une clé aléatoire:

 $key = bin2hex(openssl_random_pseudo_bytes(16));  // générer16Clé d'octet

3. Mettez régulièrement à jour la clé

Le remplacement régulier des clés est une meilleure pratique. Grâce à la rotation des clés, même si une clé est divulguée, l'attaquant ne peut pas accéder à toutes les données à l'aide d'une clé expirée.

4. Contrôle des droits d'accès aux données

Assurez-vous que seuls les utilisateurs ou programmes autorisés ont accès à des données sensibles. Utilisez une liste de contrôle d'accès (ACL) ou un système de gestion des rôles pour limiter l'accès aux données stockées.

5. Empêcher les attaques d'injection d'objets PHP

Si vous stockez des objets PHP, vous devez faire attention à empêcher les attaques d'injection d'objets PHP (POI). Lors de la non-série , évitez les entrées non fiables. Si possible, évitez d'utiliser une non-série pour traiter les données à partir de sources de méfiance.

Vous pouvez restreindre les classes non désérialisées en utilisant ALLOTAGE_CLASSES :

 $data = unserialize($encrypted_data, ["allowed_classes" => ["YourClass"]]);

6. Sauvegarde et récupération des données

Assurez-vous que les données sensibles ont une sauvegarde sécurisée et que la sauvegarde elle-même doit être cryptée. Vérifiez régulièrement l'efficacité et la sécurité des sauvegardes pour éviter la perte de données ou la falsification.