Vai al contenuto

Firma

Indice

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.