Dans la transmission de séparation frontale, le frontal soumet généralement des données au back-end au format JSON. Pour garantir l'intégrité et la sécurité des données, le backend doit vérifier que ces champs correspondent aux champs attendus. La fonction Array_Diff_ukey () dans PHP peut nous aider à y parvenir gracieusement.
Cet article utilisera un exemple simple pour décrire comment utiliser array_diff_ukey () pour comparer les champs soumis par le front-end et les champs autorisés par le back-end pour trouver les noms de clés dépareillés.
array_diff_ukey () est une fonction intégrée PHP qui compare les noms de clés de deux tableaux et utilise une fonction de rappel définie par l'utilisateur pour comparaison. Il renvoie la valeur correspondant au nom de clé qui apparaît dans le premier tableau mais pas dans le deuxième tableau.
Prototype de fonction:
array_diff_ukey(array $array1, array $array2, callable $key_compare_func): array
Supposons que nous voulons que le backend ne reçoive que les champs suivants:
$allowedFields = [
'username' => true,
'email' => true,
'age' => true,
];
Le front-end a soumis les données suivantes:
$submittedData = [
'username' => 'alice',
'email' => 'alice@example.com',
'age' => 25,
'is_admin' => true, // Champs illégaux
];
Nous devons détecter que "is_admin" est un champ illégal.
<?php
$allowedFields = [
'username' => true,
'email' => true,
'age' => true,
];
$submittedData = [
'username' => 'alice',
'email' => 'alice@example.com',
'age' => 25,
'is_admin' => true,
];
// utiliser array_diff_ukey Comparer les champs
$invalidFields = array_diff_ukey(
$submittedData,
$allowedFields,
function($key1, $key2) {
return strcmp($key1, $key2);
}
);
if (!empty($invalidFields)) {
echo "检测到Champs illégaux:\n";
foreach ($invalidFields as $field => $value) {
echo "- $field: $value\n";
}
// Les journaux peuvent être enregistrés ou les messages d'erreur peuvent être renvoyés
// Exemple d'appel d'interface de journal(pseudocode):
$logUrl = 'https://api.m66.net/logs/invalid-fields';
// sendToApi($logUrl, ['fields' => array_keys($invalidFields)]);
} else {
echo "La vérification du champ a été passée。\n";
}
Si le nom du champ frontal est incompatible avec le back-end (comme Camel vs Contrôle), vous pouvez l'utiliser en combinaison avec la table de mappage de champ:
$fieldMap = [
'userName' => 'username',
'emailAddress' => 'email',
'userAge' => 'age',
];
// Inverser la table de carte pour la vérification
$mappedKeys = array_flip($fieldMap);
// Soumission de simulation
$submittedData = [
'userName' => 'alice',
'emailAddress' => 'alice@example.com',
'userAge' => 25,
'adminStatus' => true,
];
$invalidFields = array_diff_ukey(
$submittedData,
$mappedKeys,
'strcmp'
);
if (!empty($invalidFields)) {
echo "Les champs suivants ne sont pas définis dans la table de cartographie:\n";
print_r(array_keys($invalidFields));
} else {
echo "La vérification de la cartographie sur le terrain s'est écoulée。\n";
}
Avec array_diff_ukey () , nous pouvons rapidement trouver des champs illégaux transmis par le front-end, ou des champs non définis dans la table de mappage. Cela empêche non seulement l'injection de données illégale, mais simplifie également la logique de vérification du champ. Il est recommandé de le résumer en tant que méthode d'outil de vérification de forme générale pour améliorer la maintenabilité et la sécurité du projet.