6.1. Usare le firme
Le firme proteggono i dati scambiati tra il tuo sito e un sondaggio.
La firma di controllo è l’hash MD5 di una stringa composta dai parametri trasmessi. Il “sale” è la chiave segreta impostata nella scheda “API” delle impostazioni del sondaggio e viene aggiunto prima del calcolo dell’hash. Poiché la chiave la conoscete solo tu e Simpoll, un malintenzionato non può falsificare la firma anche se conosce l’algoritmo.
Per usare le firme di controllo, attiva l’opzione corrispondente nella scheda “API” delle impostazioni del sondaggio.
6.2. Firmare i parametri inviati a un sondaggio
La sezione 5 mostra come passare parametri a un sondaggio in un campo nascosto. Un visitatore può vedere e modificare quel campo. La firma lo impedisce.
La firma è l’hash MD5 della chiave segreta e dei valori di tutti i parametri, separati da due punti:
MD5 ( key:parameter1:parameter2 )
Elenca i valori nello stesso ordine della stringa di query.
Poi aggiungi la firma ai parametri come un normale parametro chiamato sig.
Esempio di passaggio di parametri con firma:
<?php
// Key of the poll control signature
// is set in poll parameters on "API" tab
$survey_secret_key = 'q1w2e3r4';
// Array of parameters to be sent to
// our site once the poll is passed.
// Can be formed dynamically, if necessary.
$params_arr = array(
'user_id' => 123,
'user_login' => 'anonymous'
);
// Create control signature for parameter array
$signature = md5( $survey_secret_key . ':' . implode(':', $params_arr) );
// Add control signature to parameter list
$params_arr['sig'] = $signature;
// Create URL-coded inquiry line
$params_str = http_build_query($params_arr);
?>
<!—Create field with inquiry line -->
<input type="hidden" id="simpoll_params" value="<?php echo $params_str; ?>" />
<!—Connect the poll -->
<script type="text/javascript" src="https://simpoll.com/it/embed/framejs/aa7ca07e"></script>
Se un utente modifica un parametro, la firma non corrisponde più: Simpoll non mostra il sondaggio e segnala un errore.
6.3. Firma dei risultati
I risultati che Simpoll invia al tuo sito sono firmati in modo diverso.
Poiché la risposta contiene array, la firma si calcola dalla chiave segreta e dalla risposta serializzata:
MD5 ( key:SERIALIZE( result array ) )
Per verificarla, calcola la firma dai risultati ricevuti e confrontala con quella inviata da Simpoll. Se non coincidono, scarta i risultati.
Per esempio, se il tuo script result.php riceve i risultati via POST:
Esempio di verifica della firma:
<?php
// Key of poll’s control signature
// is set in parameters on "API" tab
$survey_secret_key = 'q1w2e3r4';
// Receive parameters sent from Simpoll through POST
$results = $_POST;
// Save signature received from Simpoll
// and remove it from the list of results
$server_sig = $results['sig'];
unset($results['sig']);
// Create own control signature
// on the basis of key and results received from Simpoll
$signature = md5( $survey_secret_key . ':' . serialize($results) );
// Compare signatures
if ($server_sig == $signature) {
// ... signatures match, response is reliable ...
} else {
// ... signatures mismatch, exit ...
exit;
}
?>
Se $_POST (o $_GET) può contenere parametri che non riguardano Simpoll (per esempio quelli che il tuo CMS aggiunge a ogni richiesta), rimuovili prima di calcolare la firma.
Tutti i parametri inviati da Simpoll iniziano con sp_, tranne quelli che hai passato tu.