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]<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!