Dans PHP, les fonctions de sérialisation sont souvent utilisées pour convertir des objets ou des tableaux en chaînes pour un stockage ou une transmission facile. Qu'il s'agisse d'enregistrer des données dans une base de données ou de les transmettre sur le réseau, Serialize est un outil important. Cet article analysera en profondeur le fonctionnement de la fonction sérialisée de PHP et révèlera ses principes de mise en œuvre sous-jacents.
La fonction sérialisée convertit les variables PHP en chaînes storables ou transférables. Les utilisations courantes de cette fonction comprennent:
Convertissez un tableau ou un objet en une chaîne et stockez-le dans la base de données.
Transférer des données vers d'autres services sous forme de chaînes, en particulier pour des scénarios tels que le cache.
Par exemple:
$data = array("name" => "John", "age" => 30);
$serializedData = serialize($data);
echo $serializedData;
Le résultat de la sortie est:
a:2:{s:4:"name";s:4:"John";s:3:"age";i:30;}
À partir de ce résultat, on peut voir que Serialize code le tableau via un format spécifique afin qu'il puisse être restauré à la structure du tableau d'origine plus tard.
PHP utilise un format spécifique pour sérialiser les données. Ce format comprend des identifiants de type de données et du contenu de données. Différents types de données ont des identifiants différents:
R: tableau
s: chaîne
I: entier
B: Bolien
D: points flottants
O: objet
Par exemple, la chaîne sérialisée A: 2: {S: 4: "Name"; S: 4: "John"; S: 3: "Age"; i: 30;} représente un tableau contenant deux éléments. Le premier élément est le nom de chaîne et la valeur de chaîne correspondante John , et le deuxième élément est l' âge de la chaîne et la valeur entière 30 .
Lorsque vous sérialisez un objet, sérialiser sérialisera le nom de classe, l'attribut et l'attribut de l'objet ensemble. Par exemple, considérez le code suivant:
class Person {
public $name;
public $age;
}
$person = new Person();
$person->name = "John";
$person->age = 30;
$serializedPerson = serialize($person);
echo $serializedPerson;
La sortie peut être:
O:6:"Person":2:{s:4:"name";s:4:"John";s:3:"age";i:30;}
Ici, O: 6: "Person" signifie que le nom de classe est personne , suivi des deux attributs du nom et de l'âge de la classe, et leurs valeurs sont respectivement Jean et 30 .
La fonction de sérialisation est de convertir les données en chaînes, et la fonction non sérialisée restaure cette chaîne en variable PHP d'origine. Grâce à un non-série , nous pouvons recueilli la structure de données d'origine.
$originalData = unserialize($serializedData);
Il convient de noter que lors de l'utilisation de non-série , les types de données et les structures récupérés doivent être cohérents avec le temps de sérialisation, sinon cela peut entraîner des erreurs.
Les fonctions de sérialisation et de non-série sont très courantes dans le stockage de la base de données. Par exemple, les systèmes de cache utilisent souvent ces deux fonctions pour stocker des structures de données complexes. Grâce à la sérialisation, des structures de données complexes (telles que des tableaux ou des objets) peuvent être converties en chaînes pour un stockage et une transmission faciles.
PHP Session Management utilise également Serialize pour stocker les données de session. PHP sérialise automatiquement les objets et les tableaux de la session pour maintenir l'état des données de session entre les différentes demandes.
Bien que les fonctions de sérialisation et de non-série soient très utiles dans de nombreux scénarios, ils présentent également certains risques de sécurité. En particulier, la fonction non sérialisée peut entraîner des vulnérabilités de sécurité si elle traite les données de sources non fiables. Par exemple, la désérialisation des données construites malicieusement peut déclencher une vulnérabilité d'exécution de code à travers laquelle un attaquant peut manipuler l'application.
Pour éviter ce type de risque, le deuxième paramètre de non-série peut être utilisé pour limiter les classes qui permettent la désérialisation. Par exemple:
unserialize($data, ["allowed_classes" => false]); // Désactiver la désérialisation des objets
Alternativement, en vérifiant la fiabilité de la source de données, assurez-vous que les données malveillantes ne sont pas transmises dans une non-série .
Les fonctions de sérialisation et de non-série sont des fonctions très importantes en PHP et sont largement utilisées dans le stockage de données, la gestion des sessions et d'autres scénarios. En convertissant les données en formulaires de chaîne, ils permettent à des structures de données complexes d'être facilement stockées ou transférées. Comprendre les principes sous-jacents de ces deux fonctions aide à mieux les utiliser et à éviter les problèmes de sécurité potentiels.