Excuses pour une réponse tardive à une question déjà répondu, mais je ne pense pas que base64_decode ($ x, true) est une solution assez bonne pour ce problème. En fait, il peut ne pas y avoir une très bonne solution qui fonctionne contre une entrée donnée. Par exemple, je peux mettre beaucoup de mauvaises valeurs dans $ x et ne pas avoir une fausse valeur de retour.
var_dump(base64_decode('wtf mate',true));
string(5) "���j�"
var_dump(base64_decode('This is definitely not base64 encoded',true));
string(24) "N���^~)��r��[jǺ��ܡם"
Je pense qu'en plus de la vérification stricte de la valeur de retour, vous devez également effectuer une validation post-décodage. Le moyen le plus fiable est de pouvoir décoder et vérifier par rapport à un ensemble connu de valeurs possibles. Une solution plus générale avec moins de 100% de précision (plus proche avec des chaînes plus longues, inexacte pour les chaînes courtes) est si vous vérifiez votre sortie pour voir si beaucoup sont en dehors d'une gamme normale de utf-8 (ou utiliser) caractères.
Voir cet exemple:
<?php
$english = array();
foreach (str_split('[email protected]#$%^*()_+|}?><": Iñtërnâtiônàlizætiøn') as $char) {
echo ord($char) . "\n";
$english[] = ord($char);
}
echo "Max value english = " . max($english) . "\n";
$nonsense = array();
echo "\n\nbase64:\n";
foreach (str_split(base64_decode('Not base64 encoded',true)) as $char) {
echo ord($char) . "\n";
$nonsense[] = ord($char);
}
echo "Max nonsense = " . max($nonsense) . "\n";
?>
Résultats:
Max value english = 195
Max nonsense = 233
Ainsi, vous pouvez faire quelque chose comme ceci:
if ($maxDecodedValue > 200) {} //decoded string is Garbage - original string not base64 encoded
else {} //decoded string is useful - it was base64 encoded
Vous devriez probablement utiliser la moyenne() du décodé Au lieu de max(), j'ai juste utilisé max() dans cet exemple car il n'y a malheureusement pas de mean() en PHP. Quelle mesure vous utilisez (moyenne, maximum, etc.) par rapport à quel seuil (par exemple 200) dépend de votre profil d'utilisation estimé. En conclusion, le seul coup gagnant est de ne pas jouer. J'essaierais d'éviter d'avoir à discerner base64 en premier lieu.
décourager ... – catbadger