Sto lavorando su uno script PHP che riceve da un form una stringa in base64, tale stringa contiene dei dati serializzati in json tramite un'implementazione in LUA:

Codice PHP:
    /**
    * Verifica che una stringa sia in base64
    */
    
private function isValidB64$in_data )
    {
        if( 
preg_match'![^a-zA-Z0-9/+=]!'addslashes($in_data) ) )
        {
            return 
false;
        }
        return 
true;
    }

    
/**
    * Estrai i dati e li assegna alle variaibili della classe
    */
    
public function setData($b64char)
    {
        
// Verifico che i dati siano compatibili con Base64:
        
if (!$this->isValidB64($b64char))
        {
            return 
false;
        }
        
        
// Estrazione dei dati:
        
$decodedB64Data base64_decode($b64char); // mah..
        
        // Verifico che i dati estratti siano in formato JSON valido.
        
$deserializedData json_decode($decodedB64Data);
        if (
$deserializedData === null)
        {
            return 
false;
        }
        
        
//Assegnazione variabili membro
        
$this->serializedCharacter $decodedB64Data;
        
$this->nome htmlentities($deserializedData[0], ENT_QUOTES);
        if ((int)
$deserializedData[1]<|| (int)$deserializedData[1] > 80)
        {
            return 
false;
        }
        
$this->livello = (int)$deserializedData[1];
        
$this->server htmlentities($deserializedData[2], ENT_QUOTES);
        
$this->classe htmlentities($deserializedData[3], ENT_QUOTES);
        
$this->razza htmlentities($deserializedData[4], ENT_QUOTES);
        return 
true;
    } 
Il mio dilemma è nel punto:

// Estrazione dei dati:
$decodedB64Data = base64_decode($b64char); // mah..

Corro dei rischi con questa assegnazione? (Se l'utente inserisse una stringa valida in base64 ma dai contenuti alterati?)

C'è un modo per verificare che la stringa decodificata sia nel formato giusto (JSON) senza usare json_decode()?

Inoltre la validazione di json_decode è affidabile? Qualcuno ad esempio potrebbe inserire del codice malevolo, correttamente presentato in JSON, che agisca quando:

$deserializedData = json_decode($decodedB64Data);

Esiste qualche classe che mi permetta di associare uno schema ai dati ricevuti (e verificare che corrispondano)?

Grazie per l'attenzione!