Aller au contenu

Signature

Sommaire

6.1. Utiliser les signatures

Les signatures protègent les données échangées entre votre site et un sondage.

La signature de contrôle est le hachage MD5 d’une chaîne composée des paramètres transmis. Le « sel » est la clé secrète définie dans l’onglet « API » des réglages du sondage ; il est ajouté avant le hachage. Comme seuls vous et Simpoll connaissez la clé, un attaquant ne peut pas falsifier la signature, même s’il connaît l’algorithme.

Pour utiliser les signatures de contrôle, activez l’option correspondante dans l’onglet « API » des réglages du sondage.

6.2. Signer les paramètres envoyés à un sondage

La section 5 montre comment transmettre des paramètres à un sondage dans un champ caché. Un visiteur peut voir et modifier ce champ. La signature l’en empêche.

La signature est le hachage MD5 de la clé secrète et des valeurs de tous les paramètres, séparées par des deux-points :

MD5 ( key:parameter1:parameter2 )

Indiquez les valeurs dans le même ordre que dans la chaîne de requête.

Ajoutez ensuite la signature aux paramètres comme un paramètre ordinaire nommé sig.

Exemple de transmission de paramètres avec signature :

<?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/fr/embed/framejs/aa7ca07e"></script>

Si un utilisateur modifie un paramètre, la signature ne correspond plus : Simpoll n’affiche pas le sondage et signale une erreur.

6.3. Signature des résultats

Les résultats que Simpoll envoie à votre site sont signés autrement.

Comme la réponse contient des tableaux, la signature est calculée à partir de la clé secrète et de la réponse sérialisée :

MD5 ( key:SERIALIZE( result array ) )

Pour la vérifier, calculez la signature à partir des résultats reçus et comparez-la à celle envoyée par Simpoll. Si elles diffèrent, rejetez les résultats.

Par exemple, si votre script result.php reçoit les résultats par POST :

Exemple de vérification de la signature :

<?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;
    }
?>

Si $_POST (ou $_GET) peut contenir des paramètres sans rapport avec Simpoll (par exemple ceux que votre CMS ajoute à chaque requête), retirez-les avant de calculer la signature.

Tous les paramètres envoyés par Simpoll commencent par sp_, sauf ceux que vous avez transmis vous-même.